You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by so...@apache.org on 2017/03/31 09:42:28 UTC

[1/4] incubator-weex git commit: + [html5] test for vue-render.

Repository: incubator-weex
Updated Branches:
  refs/heads/0.11-dev f8abba9d2 -> 58fd3fe79


+ [html5] test for vue-render.


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

Branch: refs/heads/0.11-dev
Commit: b5ae07c7e410cb95acb413fa916a0613e307de8e
Parents: 91b8cc5
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Mar 31 14:35:28 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Mar 31 14:35:28 2017 +0800

----------------------------------------------------------------------
 .eslintrc                                   |   3 +-
 build/karma.vue.conf.js                     |  67 +++++++---
 html5/render/vue/components/a.js            |   3 +-
 html5/render/vue/components/div.js          |  10 +-
 html5/render/vue/components/image.js        |   2 +-
 html5/render/vue/mixins/base.js             |   7 +
 html5/test/render/index.js                  |   3 -
 html5/test/render/vue/components/a.js       |  38 ++++++
 html5/test/render/vue/components/div.js     |  29 +++++
 html5/test/render/vue/components/image.js   |  44 ++++---
 html5/test/render/vue/components/list.js    |  21 ++-
 html5/test/render/vue/components/switch.js  |  35 ++---
 html5/test/render/vue/components/text.js    |  42 +++---
 html5/test/render/vue/components/web.js     |  14 +-
 html5/test/render/vue/examples/list-cell.js |  16 +--
 html5/test/render/vue/helper.js             | 157 +++++++++++++++++++----
 html5/test/render/vue/utils.js              |   1 -
 html5/test/render/vue/validator/check.js    |   1 -
 html5/test/render/vue/validator/index.js    |   1 -
 html5/test/render/vue/validator/prop.js     |   1 -
 html5/test/render/vue/validator/style.js    |   1 -
 package.json                                |   4 +-
 22 files changed, 353 insertions(+), 147 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/.eslintrc
----------------------------------------------------------------------
diff --git a/.eslintrc b/.eslintrc
index c8e3813..80d82b7 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -29,7 +29,8 @@
     "callNative": false,
     "callNativeModule": false,
     "callAddElement":false,
-    "callJS": false
+    "callJS": false,
+    "expect": false
   },
 
   "rules": {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/build/karma.vue.conf.js
----------------------------------------------------------------------
diff --git a/build/karma.vue.conf.js b/build/karma.vue.conf.js
index d71f579..c447026 100644
--- a/build/karma.vue.conf.js
+++ b/build/karma.vue.conf.js
@@ -1,44 +1,81 @@
-var webpackConfig = require('./webpack.vue.config')
+var flow = require('rollup-plugin-flow')
+var buble = require('rollup-plugin-buble')
+var replace = require('rollup-plugin-replace')
+var rollupConfig = require('./config')('weex-vue-render', true)
+var path = require('path')
 
-delete webpackConfig.entry
-delete webpackConfig.output
+function absolute (pa) {
+  return path.resolve(__dirname, pa)
+}
+
+var removeConfigs = ['entry', 'dest', 'banner']
+var removePlugins = ['eslint', 'uglify']
+
+removeConfigs.forEach(cfg => {
+  delete rollupConfig[cfg]
+})
+
+var plugins = rollupConfig.plugins.slice()
+rollupConfig.plugins = []
 
-webpackConfig.babel = {
-  plugins: [
-    ['coverage', { ignore: ['test/'] }]
-  ]
+for (var i = 0, l = plugins.length; i < l; i++) {
+  var plg = plugins[i]
+  var isRemove = false
+  if (removePlugins.length <= 0) {
+    rollupConfig.plugins.push(plg)
+  }
+  removePlugins.forEach(rp => {
+    if (plg.name === rp) {
+      isRemove = true
+    }
+  })
+  if (!isRemove) { rollupConfig.plugins.push(plg) }
 }
 
+rollupConfig.format = 'iife'
+rollupConfig.sourceMap = 'inline'
+
 module.exports = function (config) {
   config.set({
-    frameworks: ['mocha'],
+    frameworks: ['mocha', 'sinon-chai'],
     browsers: ['PhantomJS'],
     files: [
-      '../html5/test/render/index.js'
+      '../html5/test/render/vue/**/*.js'
+      // '../html5/test/render/vue/components/*.js'
+    ],
+
+    exclude: [
+      '../html5/test/render/vue/helper.js',
+      '../html5/test/render/vue/vender/**/*.js'
+      // '../html5/test/render/vue/examples/**/*.js'
     ],
 
+    // singleRun: false,
     singleRun: true,
 
     reporters: ['mocha', 'coverage'],
     coverageReporter: {
       reporters: [
-        { type: 'html', dir: '../coverage', subdir: 'vue-renderer' },
-        { type: 'text-summary', dir: '../coverage', subdir: 'vue-renderer' }
+        { type: 'html', dir: absolute('../coverage'), subdir: 'vue-renderer' },
+        { type: 'text-summary', dir: absolute('../coverage'), subdir: 'vue-renderer' }
       ]
     },
 
     preprocessors: {
-      '../html5/test/**/*.js': ['webpack', 'sourcemap']
+      '../html5/test/**/*.js': ['rollup', 'coverage'],
+      // '../html5/test/**/!(components|examples)/*.js': ['rollup', 'coverage']
     },
-    webpack: webpackConfig,
+    rollupPreprocessor: rollupConfig,
 
     plugins: [
       'karma-coverage',
       'karma-mocha',
       'karma-mocha-reporter',
       'karma-phantomjs-launcher',
-      'karma-sourcemap-loader',
-      'karma-webpack'
+      'karma-rollup-preprocessor',
+      'karma-sinon-chai'
+      // 'karma-sourcemap-loader',
+      // 'karma-webpack'
     ]
   })
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/render/vue/components/a.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/a.js b/html5/render/vue/components/a.js
index 784e52e..aa973fd 100644
--- a/html5/render/vue/components/a.js
+++ b/html5/render/vue/components/a.js
@@ -1,6 +1,7 @@
 // import { validateStyles } from '../validator'
 
 export default {
+  name: 'weex-a',
   props: {
     href: String
   },
@@ -16,6 +17,6 @@ export default {
       },
       on: this._createEventMap(),
       staticClass: 'weex-a weex-ct'
-    }, this.$slots.default)
+    }, this._trimTextNodeChildren(this.$slots.default))
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/render/vue/components/div.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/div.js b/html5/render/vue/components/div.js
index d697020..033ba9d 100644
--- a/html5/render/vue/components/div.js
+++ b/html5/render/vue/components/div.js
@@ -1,13 +1,7 @@
 // import { validateStyles } from '../validator'
 
-function trimTextNode (children) {
-  if (Array.isArray(children)) {
-    return children.filter(vnode => !!vnode.tag)
-  }
-  return children
-}
-
 export default {
+  name: 'weex-div',
   render (createElement) {
     /* istanbul ignore next */
     // if (process.env.NODE_ENV === 'development') {
@@ -17,6 +11,6 @@ export default {
       attrs: { 'weex-type': 'div' },
       on: this._createEventMap(),
       staticClass: 'weex-div weex-ct'
-    }, trimTextNode(this.$slots.default))
+    }, this._trimTextNodeChildren(this.$slots.default))
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/render/vue/components/image.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/image.js b/html5/render/vue/components/image.js
index 7f6e8e7..5f4a786 100644
--- a/html5/render/vue/components/image.js
+++ b/html5/render/vue/components/image.js
@@ -2,7 +2,7 @@
  * get resize (stetch|cover|contain) related styles.
  */
 function getResizeStyle (context) {
-  const stretch = '100% 100%'
+  const stretch = '100%'
   const resize = context.resize || stretch
   const bgSize = ['cover', 'contain', stretch].indexOf(resize) > -1 ? resize : stretch
   // compatibility: http://caniuse.com/#search=background-size

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/render/vue/mixins/base.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/base.js b/html5/render/vue/mixins/base.js
index ea5fd86..dba7688 100644
--- a/html5/render/vue/mixins/base.js
+++ b/html5/render/vue/mixins/base.js
@@ -116,6 +116,13 @@ export default {
       if (process.env.NODE_ENV === 'development') {
         tagEnd('base._fireLazyload')
       }
+    },
+
+    _trimTextNodeChildren (children) {
+      if (Array.isArray(children)) {
+        return children.filter(vnode => !!vnode.tag)
+      }
+      return children
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/index.js
----------------------------------------------------------------------
diff --git a/html5/test/render/index.js b/html5/test/render/index.js
deleted file mode 100644
index bca3504..0000000
--- a/html5/test/render/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-// require all test files
-const testsContext = require.context('./vue', true, /\.js$/)
-testsContext.keys().forEach(testsContext)

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/components/a.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/components/a.js b/html5/test/render/vue/components/a.js
new file mode 100644
index 0000000..89574b7
--- /dev/null
+++ b/html5/test/render/vue/components/a.js
@@ -0,0 +1,38 @@
+import { init } from '../helper'
+import a from '../../../../render/vue/components/a'
+import div from '../../../../render/vue/components/div'
+
+init('<a> component', (Vue, helper) => {
+  const { compile, utils } = helper
+
+  before(() => {
+    helper.register('a', a)
+    helper.register('div', div)
+  })
+
+  it('simple <a> component', () => {
+    const vm = compile(`<a>abc</a>`)
+    const el = vm.$el
+    expect(el.tagName.toLowerCase()).to.equal('a')
+    const classListArr = utils.toArray(el.classList)
+    expect('weex-a').to.be.oneOf(classListArr)
+    expect('weex-ct').to.be.oneOf(classListArr)
+    expect(el.getAttribute('weex-type')).to.be.equal('a')
+    expect(el.innerHTML).to.be.equal('')
+  })
+
+  it('<a> with href', () => {
+    const href = '//m.taobao.com'
+    const vm = compile(`<a href="${href}"></a>`)
+    expect(vm.$el.getAttribute('href')).to.be.equal(href)
+  })
+
+  it('<a> with children <div>', () => {
+    const href = '//m.taobao.com'
+    const vm = compile(`<a href="${href}"><div></div></a>`)
+    const el = vm.$el
+    expect(el.children.length).to.be.equal(1)
+    expect(el.children[0].tagName).to.match(/^(?:html:)?div$/i)
+    expect(el.children[0].getAttribute('weex-type')).to.be.equal('div')
+  })
+})

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/components/div.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/components/div.js b/html5/test/render/vue/components/div.js
new file mode 100644
index 0000000..12b0536
--- /dev/null
+++ b/html5/test/render/vue/components/div.js
@@ -0,0 +1,29 @@
+import { init } from '../helper'
+import div from '../../../../render/vue/components/div'
+
+init('<div> component', (Vue, helper) => {
+  const { compile, utils } = helper
+
+  before(() => {
+    helper.register('div', div)
+  })
+
+  it('simple <div> component', () => {
+    const vm = compile(`<div>abc</div>`)
+    const el = vm.$el
+    expect(el.tagName.toLowerCase()).to.equal('div')
+    const classListArr = utils.toArray(el.classList)
+    expect('weex-div').to.be.oneOf(classListArr)
+    expect('weex-ct').to.be.oneOf(classListArr)
+    expect(el.getAttribute('weex-type')).to.be.equal('div')
+    expect(el.innerHTML).to.be.equal('')
+  })
+
+  it('<div> with children <div>', () => {
+    const vm = compile(`<div><div></div></div>`)
+    const el = vm.$el
+    expect(el.children.length).to.be.equal(1)
+    expect(el.children[0].tagName).to.match(/^(?:html:)?div$/i)
+    expect(el.children[0].getAttribute('weex-type')).to.be.equal('div')
+  })
+})

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/components/image.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/components/image.js b/html5/test/render/vue/components/image.js
index 24ec318..241696a 100644
--- a/html5/test/render/vue/components/image.js
+++ b/html5/test/render/vue/components/image.js
@@ -1,49 +1,51 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+import { init } from '../helper'
 import image from '../../../../render/vue/components/image'
 
-multiDescribe('<image> component', (Vue, helper) => {
+init('<image> component', (Vue, helper) => {
+  const { compile, utils } = helper
+
   before(() => {
     helper.register('image', image)
   })
 
-  after(() => {
-    helper.reset()
-  })
-
   it('simple <image> component', () => {
-    const vm = helper.compile(`<image>abc</image>`)
-
-    // console.log(vm.$el)
-    expect(vm.$el.tagName).to.be.equal('FIGURE')
-    expect(vm.$el.className).to.be.equal('weex-image')
-    expect(vm.$el.innerHTML).to.be.equal('')
+    const vm = compile(`<image>abc</image>`)
+    const el = vm.$el
+    expect(el.tagName.toLowerCase()).to.be.equal('figure')
+    expect(utils.toArray(el.classList)).to.include.members(['weex-image', 'weex-el'])
+    expect(el.getAttribute('weex-type')).to.be.equal('image')
+    expect(el.innerHTML).to.be.equal('')
   })
 
   it('<image> with src', () => {
-    const src = 'https://vuejs.org/images/logo.png'
-    const vm = helper.compile(`<image src="${src}">`)
+    const src = '//vuejs.org/images/logo.png'
+    const vm = compile(`<image src="${src}"></image>`)
+    expect(vm.$el.getAttribute('img-src')).to.be.equal(`${src}`)
+  })
 
-    expect(vm.$el.style.backgroundImage).match(new RegExp(`url\s*\\("?${src}"?\\)`), 'i')
+  it('<image> with placeholder', () => {
+    const placeholder = '//vuejs.org/images/logo.png'
+    const vm = compile(`<image placeholder="${placeholder}"></image>`)
+    expect(vm.$el.getAttribute('img-placeholder')).to.be.equal(`${placeholder}`)
   })
 
   it('<image> resize="cover"', () => {
-    const vm = helper.compile(`<image resize="cover">`)
+    const vm = compile(`<image resize="cover"></image>`)
     expect(vm.$el.style.backgroundSize).to.be.equal('cover')
   })
 
   it('<image> resize="contain"', () => {
-    const vm = helper.compile(`<image resize="contain">`)
+    const vm = compile(`<image resize="contain"></image>`)
     expect(vm.$el.style.backgroundSize).to.be.equal('contain')
   })
 
   it('<image> resize="stretch"', () => {
-    const vm = helper.compile(`<image resize="stretch">`)
+    const vm = compile(`<image resize="stretch"></image>`)
     expect(vm.$el.style.backgroundSize).to.be.equal('100%')
   })
 
   it('<image> unknown resize', () => {
-    const vm = helper.compile(`<image resize="unknown">`)
-    expect(vm.$el.style.backgroundSize).to.be.equal('')
+    const vm = compile(`<image resize="unknown"></image>`)
+    expect(vm.$el.style.backgroundSize).to.be.equal('100%')
   })
 })

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/components/list.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/components/list.js b/html5/test/render/vue/components/list.js
index fe557ae..adc880b 100644
--- a/html5/test/render/vue/components/list.js
+++ b/html5/test/render/vue/components/list.js
@@ -1,21 +1,18 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+import { init } from '../helper'
 import list from '../../../../render/vue/components/scrollable/list'
+import cell from '../../../../render/vue/components/scrollable/list/cell'
+
+init('<list> component', (Vue, helper) => {
+  const { utils, compile } = helper
 
-multiDescribe('<list> component', (Vue, helper) => {
   before(() => {
     helper.register('list', list)
-  })
-
-  after(() => {
-    helper.reset()
+    helper.register('cell', cell)
   })
 
   it('create simple list component', () => {
-    const vm = helper.compile(`<list><cell></cell></list>`)
-
-    // console.log(vm.$el)
-    expect(vm.$el.tagName).to.be.equal('MAIN')
-    expect(vm.$el.className).to.be.equal('weex-list weex-list-wrapper')
+    const vm = compile(`<list><cell></cell></list>`)
+    expect(vm.$el.tagName.toLowerCase()).to.be.equal('main')
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-list', 'weex-list-wrapper', 'weex-ct'])
   })
 })

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/components/switch.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/components/switch.js b/html5/test/render/vue/components/switch.js
index 6fc2cf0..2c892f3 100644
--- a/html5/test/render/vue/components/switch.js
+++ b/html5/test/render/vue/components/switch.js
@@ -1,8 +1,9 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+import { init } from '../helper'
 import _switch from '../../../../render/vue/components/switch'
 
-multiDescribe('<switch> component', (Vue, helper) => {
+init('<switch> component', (Vue, helper) => {
+  const { utils, compile } = helper
+
   before(() => {
     helper.register('switch', _switch)
   })
@@ -12,18 +13,18 @@ multiDescribe('<switch> component', (Vue, helper) => {
   })
 
   it('simple <switch> component', () => {
-    const vm = helper.compile(`<switch></switch>`)
+    const vm = compile(`<switch></switch>`)
 
     // console.log(vm.$el)
     expect(vm.$el.tagName).to.be.equal('SPAN')
-    expect(vm.$el.className).to.be.equal('weex-switch')
+    expect(utils.toArray(vm.$el.classList)).to.include('weex-switch')
     expect(vm.$el.innerHTML).to.be.equal('<small class="weex-switch-inner"></small>')
   })
 
   it('disabled <switch>', () => {
-    const vmA = helper.compile(`<switch disabled="true"></switch>`)
-    const vmB = helper.compile(`<switch disabled></switch>`)
-    const vmC = helper.compile(`<switch disabled="disabled"></switch>`)
+    const vmA = compile(`<switch disabled="true"></switch>`)
+    const vmB = compile(`<switch disabled></switch>`)
+    const vmC = compile(`<switch disabled="disabled"></switch>`)
 
     expect(vmA.$el.className).to.match(/weex\-switch\-disabled/)
     expect(vmB.$el.className).to.match(/weex\-switch\-disabled/)
@@ -31,17 +32,17 @@ multiDescribe('<switch> component', (Vue, helper) => {
   })
 
   it('enabled <switch>', () => {
-    const vmA = helper.compile(`<switch></switch>`)
-    const vmB = helper.compile(`<switch disabled="false"></switch>`)
+    const vmA = compile(`<switch></switch>`)
+    const vmB = compile(`<switch disabled="false"></switch>`)
 
     expect(vmA.$el.className).to.be.equal('weex-switch')
     expect(vmB.$el.className).to.be.equal('weex-switch')
   })
 
   it('checked <switch>', () => {
-    const vmA = helper.compile(`<switch checked="true"></switch>`)
-    const vmB = helper.compile(`<switch checked></switch>`)
-    const vmC = helper.compile(`<switch checked="checked"></switch>`)
+    const vmA = compile(`<switch checked="true"></switch>`)
+    const vmB = compile(`<switch checked></switch>`)
+    const vmC = compile(`<switch checked="checked"></switch>`)
 
     expect(vmA.$el.className).to.match(/weex\-switch\-checked/)
     expect(vmB.$el.className).to.match(/weex\-switch\-checked/)
@@ -68,16 +69,16 @@ multiDescribe('<switch> component', (Vue, helper) => {
   })
 
   it('unchecked <switch>', () => {
-    const vmA = helper.compile(`<switch></switch>`)
-    const vmB = helper.compile(`<switch checked="false"></switch>`)
+    const vmA = compile(`<switch></switch>`)
+    const vmB = compile(`<switch checked="false"></switch>`)
 
     expect(vmA.$el.className).to.be.equal('weex-switch')
     expect(vmB.$el.className).to.be.equal('weex-switch')
   })
 
   it('disabled & checked <switch>', () => {
-    const vmA = helper.compile(`<switch disabled checked></switch>`)
-    const vmB = helper.compile(`<switch disabled="disabled" checked="checked"></switch>`)
+    const vmA = compile(`<switch disabled checked></switch>`)
+    const vmB = compile(`<switch disabled="disabled" checked="checked"></switch>`)
 
     expect(vmA.$el.className).to.match(/weex\-switch\-checked/)
     expect(vmA.$el.className).to.match(/weex\-switch\-disabled/)

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/components/text.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/components/text.js b/html5/test/render/vue/components/text.js
index 0a5ef6d..4f5ff94 100644
--- a/html5/test/render/vue/components/text.js
+++ b/html5/test/render/vue/components/text.js
@@ -1,9 +1,10 @@
-import { expect } from 'chai'
 import semver from 'semver'
-import { multiDescribe } from '../helper'
+import { init } from '../helper'
 import text from '../../../../render/vue/components/text'
 
-multiDescribe('<text> component', (Vue, helper) => {
+init('<text> component', (Vue, helper) => {
+  const { utils, compile } = helper
+
   before(() => {
     helper.register('text', text)
   })
@@ -13,22 +14,21 @@ multiDescribe('<text> component', (Vue, helper) => {
   })
 
   it('create simple text component', () => {
-    const vm = helper.compile(`<text>abc</text>`)
+    const vm = compile(`<text>abc</text>`)
 
     expect(vm.$el.tagName).to.be.equal('P')
     expect(vm.$el.innerHTML).to.be.equal('abc')
   })
 
   it('empty text component', () => {
-    const vm = helper.compile(`<text></text>`)
+    const vm = compile(`<text></text>`)
 
     expect(vm.$el.tagName).to.be.equal('P')
     expect(vm.$el.innerHTML).to.be.equal('')
   })
 
-  it('lines property', () => {
-    const vm = helper.compile(`<text lines="5">abc</text>`)
-
+  it('lines style', () => {
+    const vm = compile(`<text style="lines:5;">abc</text>`)
     if (semver.gt(Vue.version, '2.0.8')) {
       expect(vm.$el.style.overflow).to.be.equal('hidden')
       expect(vm.$el.style.textOverflow).to.be.equal('ellipsis')
@@ -37,7 +37,7 @@ multiDescribe('<text> component', (Vue, helper) => {
   })
 
   it('inline styles', () => {
-    const vm = helper.compile(`<text style="color:blue">abc</text>`)
+    const vm = compile(`<text style="color:blue">abc</text>`)
 
     if (semver.gt(Vue.version, '2.0.8')) {
       expect(vm.$el.style.color).to.be.equal('blue')
@@ -46,27 +46,27 @@ multiDescribe('<text> component', (Vue, helper) => {
 
   // Not sure about this feature.
   it('class property', () => {
-    const vm = helper.compile(`<text class="title"></text>`)
-    expect(vm.$el.className).to.be.equal('weex-text title')
+    const vm = compile(`<text class="title"></text>`)
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-text', 'weex-el', 'title'])
   })
 
   it('value property', () => {
-    const vm = helper.compile(`<text value="A"></text>`)
+    const vm = compile(`<text value="A"></text>`)
     expect(vm.$el.innerHTML).to.be.equal('A')
   })
 
   it('both have value and content', () => {
-    const vm = helper.compile(`<text value="A">B</text>`)
+    const vm = compile(`<text value="A">B</text>`)
     expect(vm.$el.innerHTML).to.be.equal('B')
   })
 
-  describe.skip('error usage (on native)', () => {
-    it('contain other tags', () => {
-      const vm = helper.compile(`<text><b>abc</b></text>`)
-      const span = vm.$el.children[0]
+  // describe.skip('error usage (on native)', () => {
+  //   it('contain other tags', () => {
+  //     const vm = compile(`<text><b>abc</b></text>`)
+  //     const span = vm.$el.children[0]
 
-      expect(span.tagName).to.be.equal('SPAN')
-      expect(span.innerHTML).to.be.equal('')
-    })
-  })
+  //     expect(span.tagName).to.be.equal('SPAN')
+  //     expect(span.innerHTML).to.be.equal('')
+  //   })
+  // })
 })

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/components/web.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/components/web.js b/html5/test/render/vue/components/web.js
index 6d4e37c..642bd4a 100644
--- a/html5/test/render/vue/components/web.js
+++ b/html5/test/render/vue/components/web.js
@@ -1,8 +1,8 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+import { init } from '../helper'
 import web from '../../../../render/vue/components/web'
 
-multiDescribe('<web> component', (Vue, helper) => {
+init('<web> component', (Vue, helper) => {
+  const { utils, compile } = helper
   before(() => {
     helper.register('web', web)
   })
@@ -12,18 +12,18 @@ multiDescribe('<web> component', (Vue, helper) => {
   })
 
   it('simple <web> component', () => {
-    const vm = helper.compile(`<web></web>`)
+    const vm = compile(`<web></web>`)
 
     // console.log(vm.$el)
     expect(vm.$el.tagName).to.be.equal('IFRAME')
-    expect(vm.$el.className).to.be.equal('weex-web')
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-web', 'weex-el'])
   })
 
   it('use src attribute', () => {
-    const vm = helper.compile(`<web src="https://x.cn"></web>`)
+    const vm = compile(`<web src="https://x.cn"></web>`)
 
     expect(vm.$el.tagName).to.be.equal('IFRAME')
     expect(vm.$el.getAttribute('src')).to.be.equal('https://x.cn')
-    expect(vm.$el.className).to.be.equal('weex-web')
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-web', 'weex-el'])
   })
 })

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/examples/list-cell.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/examples/list-cell.js b/html5/test/render/vue/examples/list-cell.js
index bab74e5..ad12ec4 100644
--- a/html5/test/render/vue/examples/list-cell.js
+++ b/html5/test/render/vue/examples/list-cell.js
@@ -1,22 +1,19 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+import { init } from '../helper'
 import list from '../../../../render/vue/components/scrollable/list'
 import cell from '../../../../render/vue/components/scrollable/list/cell'
 import text from '../../../../render/vue/components/text'
 
-multiDescribe('list & cell example', (Vue, helper) => {
+init('list & cell example', (Vue, helper) => {
+  const { utils, createVm } = helper
+
   before(() => {
     helper.register('list', list)
     helper.register('cell', cell)
     helper.register('text', text)
   })
 
-  after(() => {
-    helper.reset()
-  })
-
   it('create simple list component', () => {
-    const vm = helper.createVm({
+    const vm = createVm({
       template:
       `<list>
         <cell v-for="char in lists">
@@ -30,8 +27,7 @@ multiDescribe('list & cell example', (Vue, helper) => {
       }
     })
 
-    // console.log(vm.$el)
     expect(vm.$el.tagName).to.be.equal('MAIN')
-    expect(vm.$el.className).to.be.equal('weex-list weex-list-wrapper')
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-list', 'weex-list-wrapper'])
   })
 })

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/helper.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/helper.js b/html5/test/render/vue/helper.js
index 6d7144d..26daac0 100644
--- a/html5/test/render/vue/helper.js
+++ b/html5/test/render/vue/helper.js
@@ -1,31 +1,140 @@
-const Vues = [
-  require('./vender/vue-2.0.0.js'),
-  require('./vender/vue-2.1.0.js')
-]
+import '../../../render/vue/styles/reset.css'
+import '../../../render/vue/styles/components.css'
+
+import '../../../render/browser/render/gesture'
+
+/* istanbul ignore next */
+import '../../../shared/arrayFrom'
+/* istanbul ignore next */
+import '../../../shared/objectAssign'
+/* istanbul ignore next */
+import '../../../shared/objectSetPrototypeOf'
+
+/* istanbul ignore next */
+import 'core-js/modules/es6.object.to-string'
+/* istanbul ignore next */
+import 'core-js/modules/es6.string.iterator'
+/* istanbul ignore next */
+import 'core-js/modules/web.dom.iterable'
+/* istanbul ignore next */
+import 'core-js/modules/es6.promise'
+
+/* istanbul ignore next */
+import Vue from 'vue/dist/vue.esm.js'
+// import { base, scrollable, style, inputCommon } from '../../../render/vue/mixins'
+import { base, style } from '../../../render/vue/mixins'
+import weex from '../../../render/vue/env/weex'
 
 /**
- * Describe tests for multiple versions of Vue.
+ * functional tools exported by helper.utils.
+ */
+const utils = {
+  toArray (list) {
+    if (!list) return []
+    return Array.prototype.slice.call(list)
+  }
+}
+
+/**
+ * Describe tests for current versions of Vue.
  */
-export function multiDescribe (title, fn) {
+export function init (title, fn) {
   return describe(title, () => {
-    Vues.forEach(Vue => {
-      let components = {}
-      Vue.config.isReservedTag = function () { return false }
-      describe(`Vue ${Vue.version}`, () => fn(Vue, {
-        register (name, component) {
-          components[name] = component
-        },
-        reset () {
-          components = {}
-        },
-        createVm (options = {}) {
-          options.components = components
-          return new Vue(options).$mount()
-        },
-        compile (template) {
-          return this.createVm({ template })
-        }
-      }))
+    let components = {}
+
+    before(function () {
+      const htmlRegex = /^html:/i
+      Vue.config.isReservedTag = tag => htmlRegex.test(tag)
+      Vue.config.parsePlatformTagName = tag => tag.replace(htmlRegex, '')
+
+      Vue.mixin(base)
+      Vue.mixin(style)
+
+      window.global = window
+      global.weex = weex
+    })
+
+    const helper = {
+
+      utils,
+      /**
+       * register a component.
+       * @param  {string} name,
+       * @param  {object} component.
+       */
+      register (name, component) {
+        components[name] = component
+      },
+
+      /**
+       * reset registered components with empty object.
+       */
+      reset () {
+        components = {}
+      },
+
+      /**
+       * create a vm instance of Vue.
+       * @param  {Object} options.
+       * @return {Vue} vue instance.
+       */
+      createVm (options = {}) {
+        options.components = components
+        return new Vue(options).$mount()
+      },
+
+      /**
+       * [compile description]
+       * @param  {[type]} template [description]
+       * @return {[type]}          [description]
+       */
+      compile (template) {
+        return helper.createVm({ template })
+      }
+    }
+
+    /**
+     * describe a vue-render test for certain vue verson.
+     */
+    describe(`Vue ${Vue.version}`, () => {
+      after(function () {
+        helper.reset()
+      })
+
+      fn(Vue, helper)
     })
   })
 }
+
+// import vue200 from './vender/vue-2.0.0.js'
+// import vue210 from './vender/vue-2.1.0.js'
+// const Vues = [
+//   vue200,
+//   vue210
+// ]
+/**
+ * Describe tests for multiple versions of Vue.
+ */
+// export function multiDescribe (title, fn) {
+//   return describe(title, () => {
+//     Vues.forEach(Vue => {
+//       let components = {}
+//       Vue.config.isReservedTag = function () { return false }
+//       describe(`Vue ${Vue.version}`, () => fn(Vue, {
+//         register (name, component) {
+//           components[name] = component
+//         },
+//         reset () {
+//           components = {}
+//         },
+//         createVm (options = {}) {
+//           options.components = components
+//           return new Vue(options).$mount()
+//         },
+//         compile (template) {
+//           return this.createVm({ template })
+//         }
+//       }))
+//     })
+//   })
+// }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/utils.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/utils.js b/html5/test/render/vue/utils.js
index ddf1bb6..0a38e32 100644
--- a/html5/test/render/vue/utils.js
+++ b/html5/test/render/vue/utils.js
@@ -1,4 +1,3 @@
-import { expect } from 'chai'
 import * as utils from '../../../render/vue/utils'
 
 describe('utils', function () {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/validator/check.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/validator/check.js b/html5/test/render/vue/validator/check.js
index e38439c..75b7955 100644
--- a/html5/test/render/vue/validator/check.js
+++ b/html5/test/render/vue/validator/check.js
@@ -1,4 +1,3 @@
-import { expect } from 'chai'
 import * as check from '../../../../render/vue/validator/check'
 
 describe('check', () => {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/validator/index.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/validator/index.js b/html5/test/render/vue/validator/index.js
index 5df9456..581dc0b 100644
--- a/html5/test/render/vue/validator/index.js
+++ b/html5/test/render/vue/validator/index.js
@@ -1,4 +1,3 @@
-import { expect } from 'chai'
 import * as validator from '../../../../render/vue/validator'
 
 describe('validator', function () {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/validator/prop.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/validator/prop.js b/html5/test/render/vue/validator/prop.js
index 5384c54..0b8fe54 100644
--- a/html5/test/render/vue/validator/prop.js
+++ b/html5/test/render/vue/validator/prop.js
@@ -1,4 +1,3 @@
-import { expect } from 'chai'
 import * as prop from '../../../../render/vue/validator/prop'
 
 describe('check property value', () => {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/html5/test/render/vue/validator/style.js
----------------------------------------------------------------------
diff --git a/html5/test/render/vue/validator/style.js b/html5/test/render/vue/validator/style.js
index ae91d4b..55996d1 100644
--- a/html5/test/render/vue/validator/style.js
+++ b/html5/test/render/vue/validator/style.js
@@ -1,4 +1,3 @@
-import { expect } from 'chai'
 import * as style from '../../../../render/vue/validator/style'
 
 describe('check style value', () => {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b5ae07c7/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index c3b7784..25d3884 100644
--- a/package.json
+++ b/package.json
@@ -64,7 +64,7 @@
     "test:case": "mocha --require reify html5/test/case/tester.js",
     "test:vue": "karma start build/karma.vue.conf.js",
     "test:unit": "mocha --require reify html5/test/unit/*/*.js html5/test/unit/*/*/*.js",
-    "test": "npm run lint && npm run test:unit && npm run test:case",
+    "test": "npm run lint && npm run test:unit && npm run test:case && npm run test:vue",
     "test:cover-html": "babel-istanbul cover --report html node_modules/mocha/bin/_mocha -- --require reify --reporter dot html5/test/unit/*/*.js html5/test/unit/*/*/*.js && open coverage/index.html",
     "test:cover": "babel-istanbul cover --report text node_modules/mocha/bin/_mocha -- --require reify --reporter dot html5/test/unit/*/*.js html5/test/unit/*/*/*.js",
     "test:e2e": "npm run build:browser && node html5/test/e2e/runner.js",
@@ -119,6 +119,8 @@
     "karma-mocha": "^1.3.0",
     "karma-mocha-reporter": "^2.2.1",
     "karma-phantomjs-launcher": "^1.0.2",
+    "karma-rollup-preprocessor": "^3.0.3",
+    "karma-sinon-chai": "^1.2.4",
     "karma-sourcemap-loader": "^0.3.7",
     "karma-webpack": "^1.8.0",
     "macaca-cli": "^1.1.0",


[4/4] incubator-weex git commit: Merge branch '0.11-dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex; branch 'dev-web-test' of http://github.com/MrRaindrop/incubator-weex into 0.11-dev This closes #202

Posted by so...@apache.org.
Merge branch '0.11-dev' of https://git-wip-us.apache.org/repos/asf/incubator-weex; branch 'dev-web-test' of http://github.com/MrRaindrop/incubator-weex into 0.11-dev
This closes #202


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

Branch: refs/heads/0.11-dev
Commit: 58fd3fe79a327ca84f694d54eaa69374ca0817af
Parents: f8abba9 82ff96d
Author: sospartan <so...@apache.org>
Authored: Fri Mar 31 17:41:58 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Fri Mar 31 17:41:58 2017 +0800

----------------------------------------------------------------------
 .eslintrc                                   |   3 +-
 build/karma.vue.conf.js                     |  64 ++++++---
 dangerfile.js                               |   6 +-
 html5/render/vue/components/a.js            |   3 +-
 html5/render/vue/components/div.js          |  10 +-
 html5/render/vue/components/image.js        |   2 +-
 html5/render/vue/mixins/base.js             |   7 +
 html5/test/render/index.js                  |   3 -
 html5/test/render/vue/components/a.js       |  38 ++++++
 html5/test/render/vue/components/div.js     |  29 +++++
 html5/test/render/vue/components/image.js   |  44 ++++---
 html5/test/render/vue/components/list.js    |  21 ++-
 html5/test/render/vue/components/switch.js  |  35 ++---
 html5/test/render/vue/components/text.js    |  42 +++---
 html5/test/render/vue/components/web.js     |  14 +-
 html5/test/render/vue/examples/list-cell.js |  16 +--
 html5/test/render/vue/helper.js             | 157 +++++++++++++++++++----
 html5/test/render/vue/utils.js              |   1 -
 html5/test/render/vue/validator/check.js    |   1 -
 html5/test/render/vue/validator/index.js    |   1 -
 html5/test/render/vue/validator/prop.js     |   1 -
 html5/test/render/vue/validator/style.js    |   1 -
 package.json                                |   4 +-
 23 files changed, 354 insertions(+), 149 deletions(-)
----------------------------------------------------------------------



[2/4] incubator-weex git commit: * [html5] remove unused dependencies.

Posted by so...@apache.org.
* [html5] remove unused dependencies.


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

Branch: refs/heads/0.11-dev
Commit: 1375a6a13356f340aacb7eca0cef5e4f718cf107
Parents: b5ae07c
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Mar 31 14:38:50 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Mar 31 14:38:50 2017 +0800

----------------------------------------------------------------------
 build/karma.vue.conf.js | 3 ---
 1 file changed, 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1375a6a1/build/karma.vue.conf.js
----------------------------------------------------------------------
diff --git a/build/karma.vue.conf.js b/build/karma.vue.conf.js
index c447026..8844594 100644
--- a/build/karma.vue.conf.js
+++ b/build/karma.vue.conf.js
@@ -1,6 +1,3 @@
-var flow = require('rollup-plugin-flow')
-var buble = require('rollup-plugin-buble')
-var replace = require('rollup-plugin-replace')
 var rollupConfig = require('./config')('weex-vue-render', true)
 var path = require('path')
 


[3/4] incubator-weex git commit: * [html5] fix dangerfile.

Posted by so...@apache.org.
* [html5] fix dangerfile.


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

Branch: refs/heads/0.11-dev
Commit: 82ff96d989504b932f744e421bb59cec2e6955f4
Parents: 1375a6a
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Mar 31 15:13:15 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Mar 31 15:13:15 2017 +0800

----------------------------------------------------------------------
 dangerfile.js | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/82ff96d9/dangerfile.js
----------------------------------------------------------------------
diff --git a/dangerfile.js b/dangerfile.js
index 6d82fdb..b81e155 100644
--- a/dangerfile.js
+++ b/dangerfile.js
@@ -23,7 +23,9 @@ const flowIgnorePaths = [
   'bin',
   'dist',
   'flow-typed'
-].map(absolute);
+].map(function (rel) {
+  return absolute('html5/' + rel)
+});
 
 // new js files should have `@flow` at the top
 const unFlowedFiles = jsFiles.filter(filepath => {
@@ -31,7 +33,7 @@ const unFlowedFiles = jsFiles.filter(filepath => {
   const len = flowIgnorePaths.length
   while (i < len) {
     const p = flowIgnorePaths[i]
-    if (filepath.indexOf(p) > -1) {
+    if (absolute(filepath).indexOf(p) > -1) {
       // ignore this file because it's in the flow-ignore-paths.
       return false;
     }