h,
render,
nodeOps,
- NodeTypes,
+ TestNodeTypes,
TestElement,
serialize,
serializeInner
elm = root.children[0] as TestElement
expect(elm.children[0]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'text'
})
elm = root.children[0] as TestElement
expect(elm.children[0]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'text'
})
})
elm = root.children[0] as TestElement
expect(elm.children[0]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'text'
})
elm = root.children[0] as TestElement
expect(elm.children[0]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'text2'
})
})
createVNode,
render,
nodeOps,
- NodeTypes,
+ TestNodeTypes,
TestElement,
Fragment,
resetOps,
expect(serializeInner(root)).toBe(`<div>one</div>two`)
expect(root.children.length).toBe(4)
expect(root.children[0]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: ''
})
expect(root.children[1]).toMatchObject({
- type: NodeTypes.ELEMENT,
+ type: TestNodeTypes.ELEMENT,
tag: 'div'
})
expect((root.children[1] as TestElement).children[0]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'one'
})
expect(root.children[2]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'two'
})
expect(root.children[3]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: ''
})
})
nodeOps,
VNodeProps,
TestElement,
- NodeTypes,
+ TestNodeTypes,
VNode
} from '@vue/runtime-test'
onVnodeMounted: vi.fn(),
onVnodeBeforeUpdate: vi.fn(vnode => {
expect((vnode.el as TestElement).children[0]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'foo'
})
}),
onVnodeUpdated: vi.fn(vnode => {
expect((vnode.el as TestElement).children[0]).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'bar'
})
}),
onVnodeMounted: vi.fn(),
onVnodeBeforeUpdate: vi.fn(vnode => {
expect(vnode.el as TestElement).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'foo'
})
}),
onVnodeUpdated: vi.fn(vnode => {
expect(vnode.el as TestElement).toMatchObject({
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text: 'bar'
})
}),
h,
render,
nodeOps,
- NodeTypes,
+ TestNodeTypes,
TestElement,
TestText,
ref,
expect(root.children.length).toBe(1)
const el = root.children[0] as TestElement
- expect(el.type).toBe(NodeTypes.ELEMENT)
+ expect(el.type).toBe(TestNodeTypes.ELEMENT)
expect(el.props.id).toBe('test')
expect(el.children.length).toBe(1)
const text = el.children[0] as TestText
- expect(text.type).toBe(NodeTypes.TEXT)
+ expect(text.type).toBe(TestNodeTypes.TEXT)
expect(text.text).toBe('hello')
})
expect(ops[0]).toEqual({
type: NodeOpTypes.CREATE,
- nodeType: NodeTypes.ELEMENT,
+ nodeType: TestNodeTypes.ELEMENT,
tag: 'div',
targetNode: root.children[0]
})
import { markRaw } from '@vue/reactivity'
-export const enum NodeTypes {
+export const enum TestNodeTypes {
TEXT = 'text',
ELEMENT = 'element',
COMMENT = 'comment'
export interface TestElement {
id: number
- type: NodeTypes.ELEMENT
+ type: TestNodeTypes.ELEMENT
parentNode: TestElement | null
tag: string
children: TestNode[]
export interface TestText {
id: number
- type: NodeTypes.TEXT
+ type: TestNodeTypes.TEXT
parentNode: TestElement | null
text: string
}
export interface TestComment {
id: number
- type: NodeTypes.COMMENT
+ type: TestNodeTypes.COMMENT
parentNode: TestElement | null
text: string
}
export interface NodeOp {
type: NodeOpTypes
- nodeType?: NodeTypes
+ nodeType?: TestNodeTypes
tag?: string
text?: string
targetNode?: TestNode
function createElement(tag: string): TestElement {
const node: TestElement = {
id: nodeId++,
- type: NodeTypes.ELEMENT,
+ type: TestNodeTypes.ELEMENT,
tag,
children: [],
props: {},
}
logNodeOp({
type: NodeOpTypes.CREATE,
- nodeType: NodeTypes.ELEMENT,
+ nodeType: TestNodeTypes.ELEMENT,
targetNode: node,
tag
})
function createText(text: string): TestText {
const node: TestText = {
id: nodeId++,
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text,
parentNode: null
}
logNodeOp({
type: NodeOpTypes.CREATE,
- nodeType: NodeTypes.TEXT,
+ nodeType: TestNodeTypes.TEXT,
targetNode: node,
text
})
function createComment(text: string): TestComment {
const node: TestComment = {
id: nodeId++,
- type: NodeTypes.COMMENT,
+ type: TestNodeTypes.COMMENT,
text,
parentNode: null
}
logNodeOp({
type: NodeOpTypes.CREATE,
- nodeType: NodeTypes.COMMENT,
+ nodeType: TestNodeTypes.COMMENT,
targetNode: node,
text
})
el.children = [
{
id: nodeId++,
- type: NodeTypes.TEXT,
+ type: TestNodeTypes.TEXT,
text,
parentNode: el
}
import {
TestElement,
TestNode,
- NodeTypes,
+ TestNodeTypes,
TestText,
TestComment
} from './nodeOps'
indent: number = 0,
depth: number = 0
): string {
- if (node.type === NodeTypes.ELEMENT) {
+ if (node.type === TestNodeTypes.ELEMENT) {
return serializeElement(node, indent, depth)
} else {
return serializeText(node, indent, depth)
const padding = indent ? ` `.repeat(indent).repeat(depth) : ``
return (
padding +
- (node.type === NodeTypes.COMMENT ? `<!--${node.text}-->` : node.text)
+ (node.type === TestNodeTypes.COMMENT ? `<!--${node.text}-->` : node.text)
)
}
}
const key = e.id.type === 'Identifier' ? e.id.name : e.id.value
const fullKey = `${id}.${key}`
+ const saveValue = value => {
+ if (fullKey in enumData.defines) {
+ throw new Error(`name conflict for enum ${id} in ${file}`)
+ }
+ enumData.defines[fullKey] = JSON.stringify(value)
+ }
const init = e.initializer
if (init) {
let value
`unhandled initializer type ${init.type} for ${fullKey} in ${file}`
)
}
- enumData.defines[fullKey] = JSON.stringify(value)
+ saveValue(value)
lastInitialized = value
} else {
if (lastInitialized === undefined) {
// first initialized
- enumData.defines[fullKey] = `0`
+ saveValue(`0`)
lastInitialized = 0
} else if (typeof lastInitialized === 'number') {
- enumData.defines[fullKey] = String(++lastInitialized)
+ saveValue(String(++lastInitialized))
} else {
// should not happen
throw new Error(`wrong enum initialization sequence in ${file}`)