]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
test(vnode): partial tests for vnode creation (#116)
authorTim van den Eijnden <TimvdEijnden@users.noreply.github.com>
Wed, 9 Oct 2019 14:28:43 +0000 (16:28 +0200)
committerEvan You <yyx990803@gmail.com>
Wed, 9 Oct 2019 14:28:43 +0000 (10:28 -0400)
packages/runtime-core/__tests__/vnode.spec.ts

index 6cdc6f7b62c028d09a22b96f806f0e9f6f87dbea..631cc89a071cbf97b9d4f5fa15a4e0521c644530 100644 (file)
+import { createVNode } from '@vue/runtime-test'
+import { ShapeFlags } from '@vue/runtime-core'
+
 describe('vnode', () => {
-  test.todo('create with just tag')
+  test('create with just tag', () => {
+    const vnode = createVNode('p')
+    expect(vnode.type).toBe('p')
+    expect(vnode.props).toBe(null)
+  })
+
+  test('create with tag and props', () => {
+    const vnode = createVNode('p', {})
+    expect(vnode.type).toBe('p')
+    expect(vnode.props).toMatchObject({})
+  })
+
+  test('create with tag, props and children', () => {
+    const vnode = createVNode('p', {}, ['foo'])
+    expect(vnode.type).toBe('p')
+    expect(vnode.props).toMatchObject({})
+    expect(vnode.children).toMatchObject(['foo'])
+  })
+
+  test('create with 0 as props', () => {
+    const vnode = createVNode('p', null)
+    expect(vnode.type).toBe('p')
+    expect(vnode.props).toBe(null)
+  })
+
+  describe('class normalization', () => {
+    test('string', () => {
+      const vnode = createVNode('p', { class: 'foo baz' })
+      expect(vnode.props).toMatchObject({ class: 'foo baz' })
+    })
+
+    test('array<string>', () => {
+      const vnode = createVNode('p', { class: ['foo', 'baz'] })
+      expect(vnode.props).toMatchObject({ class: 'foo baz' })
+    })
+
+    test('array<object>', () => {
+      const vnode = createVNode('p', {
+        class: [{ foo: 'foo' }, { baz: 'baz' }]
+      })
+      expect(vnode.props).toMatchObject({ class: 'foo baz' })
+    })
+
+    test('object', () => {
+      const vnode = createVNode('p', { class: { foo: 'foo', baz: 'baz' } })
+      expect(vnode.props).toMatchObject({ class: 'foo baz' })
+    })
+  })
+
+  describe('style normalization', () => {
+    test('array', () => {
+      const vnode = createVNode('p', {
+        style: [{ foo: 'foo' }, { baz: 'baz' }]
+      })
+      expect(vnode.props).toMatchObject({ style: { foo: 'foo', baz: 'baz' } })
+    })
+
+    test('object', () => {
+      const vnode = createVNode('p', { style: { foo: 'foo', baz: 'baz' } })
+      expect(vnode.props).toMatchObject({ style: { foo: 'foo', baz: 'baz' } })
+    })
+  })
 
-  test.todo('create with tag and props')
+  describe('children normalization', () => {
+    const nop = jest.fn
 
-  test.todo('create with tag, props and children')
+    test('null', () => {
+      const vnode = createVNode('p', null, null)
+      expect(vnode.children).toBe(null)
+      expect(vnode.shapeFlag).toBe(ShapeFlags.ELEMENT)
+    })
 
-  test.todo('create with 0 as props')
+    test('array', () => {
+      const vnode = createVNode('p', null, ['foo'])
+      expect(vnode.children).toMatchObject(['foo'])
+      expect(vnode.shapeFlag).toBe(
+        ShapeFlags.ELEMENT + ShapeFlags.ARRAY_CHILDREN
+      )
+    })
 
-  test.todo('class normalization')
+    test('object', () => {
+      const vnode = createVNode('p', null, { foo: 'foo' })
+      expect(vnode.children).toMatchObject({ foo: 'foo' })
+      expect(vnode.shapeFlag).toBe(
+        ShapeFlags.ELEMENT + ShapeFlags.SLOTS_CHILDREN
+      )
+    })
 
-  test.todo('style normalization')
+    test('function', () => {
+      const vnode = createVNode('p', null, nop)
+      expect(vnode.children).toMatchObject({ default: nop })
+      expect(vnode.shapeFlag).toBe(
+        ShapeFlags.ELEMENT + ShapeFlags.SLOTS_CHILDREN
+      )
+    })
 
-  test.todo('children normalization')
+    test('string', () => {
+      const vnode = createVNode('p', null, 'foo')
+      expect(vnode.children).toBe('foo')
+      expect(vnode.shapeFlag).toBe(
+        ShapeFlags.ELEMENT + ShapeFlags.TEXT_CHILDREN
+      )
+    })
+  })
 
   test.todo('normalizeVNode')