| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- import * as framework from '../../../packages/weex-vue-framework'
- import { getRoot, createInstance } from '../helpers/index'
- describe('framework APIs', () => {
- it('createInstance', () => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- new Vue({
- render: function (createElement) {
- return createElement('div', {}, [
- createElement('text', { attrs: { value: 'Hello' }}, [])
- ])
- },
- el: "body"
- })
- `)
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{ type: 'text', attr: { value: 'Hello' }}]
- })
- })
- it('createInstance with config', () => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- new Vue({
- render: function (createElement) {
- return createElement('div', {}, [
- createElement('text', { attrs: { value: JSON.stringify(this.$getConfig()) }}, [])
- ])
- },
- el: "body"
- })
- `, { bundleUrl: 'http://example.com/', a: 1, b: 2 })
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{
- type: 'text',
- attr: { value: '{"bundleUrl":"http://example.com/","a":1,"b":2,"env":{}}' }
- }]
- })
- })
- it('createInstance with external data', () => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- new Vue({
- data: {
- a: 1,
- b: 2
- },
- render: function (createElement) {
- return createElement('div', {}, [
- createElement('text', { attrs: { value: this.a + '-' + this.b }}, [])
- ])
- },
- el: "body"
- })
- `, undefined, { a: 111 })
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{ type: 'text', attr: { value: '111-2' }}]
- })
- })
- it('destroyInstance', (done) => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- new Vue({
- data: {
- x: 'Hello'
- },
- render: function (createElement) {
- return createElement('div', {}, [
- createElement('text', { attrs: { value: this.x }}, [])
- ])
- },
- el: "body"
- })
- `)
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{ type: 'text', attr: { value: 'Hello' }}]
- })
- instance.$destroy()
- setTimeout(() => {
- expect(instance.document).toBeUndefined()
- expect(instance.app).toBeUndefined()
- done()
- }, 0)
- })
- it('refreshInstance', (done) => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- new Vue({
- data: {
- x: 'Hello'
- },
- render: function (createElement) {
- return createElement('div', {}, [
- createElement('text', { attrs: { value: this.x }}, [])
- ])
- },
- el: "body"
- })
- `)
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{ type: 'text', attr: { value: 'Hello' }}]
- })
- instance.$refresh({ x: 'World' })
- setTimeout(() => {
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{ type: 'text', attr: { value: 'World' }}]
- })
- instance.$destroy()
- const result = instance.$refresh({ x: 'World' })
- expect(result instanceof Error).toBe(true)
- done()
- })
- })
- it('getRoot', () => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- new Vue({
- data: {
- x: 'Hello'
- },
- render: function (createElement) {
- return createElement('div', {}, [
- createElement('text', { attrs: { value: this.x }}, [])
- ])
- },
- el: "body"
- })
- `)
- let root = framework.getRoot(id)
- expect(root.ref).toEqual('_root')
- expect(root.type).toEqual('div')
- expect(root.children.length).toEqual(1)
- expect(root.children[0].type).toEqual('text')
- expect(root.children[0].attr).toEqual({ value: 'Hello' })
- framework.destroyInstance(instance.id)
- root = framework.getRoot(instance.id)
- expect(root instanceof Error).toBe(true)
- expect(root).toMatch(/getRoot/)
- expect(root).toMatch(/not found/)
- })
- // TODO: deprecated, move to weex-js-runtime
- it('receiveTasks: fireEvent', (done) => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- new Vue({
- data: {
- x: 'Hello'
- },
- methods: {
- update: function (e) {
- this.x = 'World'
- }
- },
- render: function (createElement) {
- return createElement('div', {}, [
- createElement('text', { attrs: { value: this.x }, on: { click: this.update }}, [])
- ])
- },
- el: "body"
- })
- `)
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{
- type: 'text',
- attr: { value: 'Hello' },
- event: ['click']
- }]
- })
- const textRef = framework.getRoot(id).children[0].ref
- framework.receiveTasks(id, [
- { method: 'fireEvent', args: [textRef, 'click'] }
- ])
- setTimeout(() => {
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{
- type: 'text',
- attr: { value: 'World' },
- event: ['click']
- }]
- })
- framework.destroyInstance(id)
- const result = framework.receiveTasks(id, [
- { method: 'fireEvent', args: [textRef, 'click'] }
- ])
- expect(result instanceof Error).toBe(true)
- done()
- })
- })
- it('vm.$getConfig', () => {
- const id = String(Date.now() * Math.random())
- global.WXEnvironment = {
- weexVersion: '0.10.0',
- platform: 'Node.js'
- }
- const instance = createInstance(id, `
- new Vue({
- render: function (createElement) {
- return createElement('div', {}, [
- createElement('text', { attrs: { value: JSON.stringify(this.$getConfig()) }}, [])
- ])
- },
- el: "body"
- })
- `, { bundleUrl: 'http://whatever.com/x.js' })
- expect(JSON.parse(getRoot(instance).children[0].attr.value)).toEqual({
- bundleUrl: 'http://whatever.com/x.js',
- env: {
- weexVersion: '0.10.0',
- platform: 'Node.js'
- }
- })
- delete global.WXEnvironment
- })
- it('registering global assets', () => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- Vue.component('test', {
- render (h) {
- return h('div', 'Hello')
- }
- })
- new Vue({
- render (h) {
- return h('test')
- },
- el: 'body'
- })
- `)
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{ type: 'text', attr: { value: 'Hello' }}]
- })
- })
- it('adding prototype methods', () => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- Vue.prototype.$test = () => 'Hello'
- const Test = {
- render (h) {
- return h('div', this.$test())
- }
- }
- new Vue({
- render (h) {
- return h(Test)
- },
- el: 'body'
- })
- `)
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{ type: 'text', attr: { value: 'Hello' }}]
- })
- })
- it('using global mixins', () => {
- const id = String(Date.now() * Math.random())
- const instance = createInstance(id, `
- Vue.mixin({
- created () {
- this.test = true
- }
- })
- const Test = {
- data: () => ({ test: false }),
- render (h) {
- return h('div', this.test ? 'Hello' : 'nope')
- }
- }
- new Vue({
- data: { test: false },
- render (h) {
- return this.test ? h(Test) : h('p')
- },
- el: 'body'
- })
- `)
- expect(getRoot(instance)).toEqual({
- type: 'div',
- children: [{ type: 'text', attr: { value: 'Hello' }}]
- })
- })
- })
|