setCurrentRenderingInstance(null)
})
+ test('cloneVNode class normalization', () => {
+ const vnode = createVNode('div')
+ const expectedProps = {
+ class: 'a b'
+ }
+ expect(cloneVNode(vnode, { class: 'a b' }).props).toMatchObject(
+ expectedProps
+ )
+ expect(cloneVNode(vnode, { class: ['a', 'b'] }).props).toMatchObject(
+ expectedProps
+ )
+ expect(
+ cloneVNode(vnode, { class: { a: true, b: true } }).props
+ ).toMatchObject(expectedProps)
+ expect(
+ cloneVNode(vnode, { class: [{ a: true, b: true }] }).props
+ ).toMatchObject(expectedProps)
+ })
+
+ test('cloneVNode style normalization', () => {
+ const vnode = createVNode('div')
+ const expectedProps = {
+ style: {
+ color: 'blue',
+ width: '300px'
+ }
+ }
+ expect(
+ cloneVNode(vnode, { style: 'color: blue; width: 300px;' }).props
+ ).toMatchObject(expectedProps)
+ expect(
+ cloneVNode(vnode, {
+ style: {
+ color: 'blue',
+ width: '300px'
+ }
+ }).props
+ ).toMatchObject(expectedProps)
+ expect(
+ cloneVNode(vnode, {
+ style: [
+ {
+ color: 'blue',
+ width: '300px'
+ }
+ ]
+ }).props
+ ).toMatchObject(expectedProps)
+ })
+
describe('mergeProps', () => {
test('class', () => {
let props1: Data = { class: 'c' }
// This is intentionally NOT using spread or extend to avoid the runtime
// key enumeration cost.
const { props, patchFlag } = vnode
- const mergedProps = extraProps
- ? props
- ? mergeProps(props, extraProps)
- : extend({}, extraProps)
- : props
+ const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props
return {
__v_isVNode: true,
[ReactiveFlags.SKIP]: true,