]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
feat: serialize for test renderer
authorEvan You <yyx990803@gmail.com>
Mon, 1 Oct 2018 21:22:49 +0000 (17:22 -0400)
committerEvan You <yyx990803@gmail.com>
Mon, 1 Oct 2018 21:22:49 +0000 (17:22 -0400)
packages/renderer-test/__tests__/testRenderer.spec.ts
packages/renderer-test/src/index.ts
packages/renderer-test/src/serialize.ts [new file with mode: 0644]

index 20936dc9259f3bfca3eb427d8a80057f34a5aff4..e50f9706cb35355dfbce393f157b52f4ea77a199 100644 (file)
@@ -10,25 +10,20 @@ import {
   NodeOpTypes,
   nextTick,
   observable,
-  resetOps
+  resetOps,
+  serialize
 } from '../src'
 
 describe('test renderer', () => {
   it('should work', () => {
     class App extends Component {
-      data() {
-        return {
-          id: 'test',
-          text: 'hello'
-        }
-      }
       render() {
         return h(
           'div',
           {
-            id: this.id
+            id: 'test'
           },
-          this.text
+          'hello'
         )
       }
     }
@@ -128,4 +123,28 @@ describe('test renderer', () => {
       text: 'bar'
     })
   })
+
+  it('should be able to serialize nodes', () => {
+    class App extends Component {
+      render() {
+        return h(
+          'div',
+          {
+            id: 'test'
+          },
+          'hello'
+        )
+      }
+    }
+    const root = nodeOps.createElement('div')
+    render(h(App), root)
+
+    expect(serialize(root)).toEqual(
+      `<div>
+  <div id="test">
+    hello
+  </div>
+</div>`
+    )
+  })
 })
index 6436f98b1fab2b6749de3f7f7c877e878822a63c..9a7d0322080c4786226da9a2cd34c954221fa086 100644 (file)
@@ -10,5 +10,6 @@ const { render: _render } = createRenderer({
 type publicRender = (node: VNode | null, container: TestElement) => void
 export const render = _render as publicRender
 
+export { serialize } from './serialize'
 export * from './nodeOps'
 export * from '@vue/core'
diff --git a/packages/renderer-test/src/serialize.ts b/packages/renderer-test/src/serialize.ts
new file mode 100644 (file)
index 0000000..ffb81f0
--- /dev/null
@@ -0,0 +1,30 @@
+import { TestElement, TestNode, NodeTypes, TestText } from './nodeOps'
+
+export function serialize(node: TestNode, depth: number = 0): string {
+  if (node.type === NodeTypes.ELEMENT) {
+    return serializeElement(node, depth)
+  } else {
+    return serializeText(node, depth)
+  }
+}
+
+function serializeElement(node: TestElement, depth: number): string {
+  const props = Object.keys(node.props)
+    .map(key => {
+      return `${key}=${JSON.stringify(node.props[key])}`
+    })
+    .join(' ')
+  const children = node.children.length
+    ? `\n${node.children.map(c => serialize(c, depth + 1))}\n`
+    : ``
+  const padding = `  `.repeat(depth)
+  return (
+    `${padding}<${node.tag}${props ? ` ${props}` : ``}>` +
+    `${children}` +
+    `${padding}</${node.tag}>`
+  )
+}
+
+function serializeText(node: TestText, depth: number): string {
+  return `  `.repeat(depth) + node.text
+}