message: tests for functional component api improvements
diff: @@ -22,6 +22,53 @@ describe('Options functional', () => {
  }).then(done)
  })
  + it('should expose all props when not declared', done => {
  + const vm = new Vue({
  + data: { test: 'foo' },
  + template: '<div><wrap :msg="test" kebab-msg="bar"></wrap></div>',
  + components: {
  + wrap: {
  + functional: true,
  + render (h, { props }) {
  + return h('div', `${props.msg} ${props.kebabMsg}`)
  + }
  + }
  + }
  + }).$mount()
  + expect(vm.$el.innerHTML).toBe('<div>foo bar</div>')
  + vm.test = 'qux'
  + waitForUpdate(() => {
  + expect(vm.$el.innerHTML).toBe('<div>qux bar</div>')
  + }).then(done)
  + })
  +
  + it('should expose data.on as listeners', () => {
  + const foo = jasmine.createSpy('foo')
  + const bar = jasmine.createSpy('bar')
  + const vm = new Vue({
  + template: '<div><wrap @click="foo" @test="bar"/></div>',
  + methods: { foo, bar },
  + components: {
  + wrap: {
  + functional: true,
  + render (h, { listeners }) {
  + return h('div', {
  + on: {
  + click: [listeners.click, () => listeners.test('bar')]
  + }
  + })
  + }
  + }
  + }
  + }).$mount()
  +
  + triggerEvent(vm.$el.children[0], 'click')
  + expect(foo).toHaveBeenCalled()
  + expect(foo.calls.argsFor(0)[0].type).toBe('click') // should have click event
  + triggerEvent(vm.$el.children[0], 'mousedown')
  + expect(bar).toHaveBeenCalledWith('bar')
  + })
  +
  it('should support returning more than one root node', () => {
  const vm = new Vue({
  template: `<div><test></test></div>`,
  