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'
)
}
}
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>`
+ )
+ })
})
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'
--- /dev/null
+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
+}