nodeOps,
NodeTypes,
TestElement,
- TestText
- // dumpOps,
- // NodeOpTypes,
- // nextTick,
- // state,
- // resetOps,
- // serialize,
- // triggerEvent
+ TestText,
+ ref,
+ reactive,
+ dumpOps,
+ resetOps,
+ NodeOpTypes,
+ nextTick,
+ serialize,
+ triggerEvent
} from '../src'
describe('test renderer', () => {
- it('should work', async () => {
+ it('should work', () => {
const root = nodeOps.createElement('div')
render(
h(
expect(text.text).toBe('hello')
})
- // it('should record ops', async () => {
- // const store = state({
- // id: 'test',
- // text: 'hello'
- // })
-
- // class App extends Component {
- // render() {
- // return h(
- // 'div',
- // {
- // id: store.id
- // },
- // store.text
- // )
- // }
- // }
- // const root = nodeOps.createElement('div')
-
- // resetOps()
- // await render(h(App), root)
- // const ops = dumpOps()
-
- // expect(ops.length).toBe(5)
-
- // expect(ops[0]).toEqual({
- // type: NodeOpTypes.CREATE,
- // nodeType: NodeTypes.ELEMENT,
- // tag: 'div',
- // targetNode: root.children[0]
- // })
-
- // expect(ops[1]).toEqual({
- // type: NodeOpTypes.PATCH,
- // targetNode: root.children[0],
- // propKey: 'id',
- // propPrevValue: null,
- // propNextValue: 'test'
- // })
-
- // expect(ops[2]).toEqual({
- // type: NodeOpTypes.CREATE,
- // nodeType: NodeTypes.TEXT,
- // text: 'hello',
- // targetNode: (root.children[0] as TestElement).children[0]
- // })
-
- // expect(ops[3]).toEqual({
- // type: NodeOpTypes.APPEND,
- // targetNode: (root.children[0] as TestElement).children[0],
- // parentNode: root.children[0]
- // })
-
- // expect(ops[4]).toEqual({
- // type: NodeOpTypes.APPEND,
- // targetNode: root.children[0],
- // parentNode: root
- // })
-
- // // test update ops
- // store.id = 'foo'
- // store.text = 'bar'
- // await nextTick()
-
- // const updateOps = dumpOps()
- // expect(updateOps.length).toBe(2)
-
- // expect(updateOps[0]).toEqual({
- // type: NodeOpTypes.PATCH,
- // targetNode: root.children[0],
- // propKey: 'id',
- // propPrevValue: 'test',
- // propNextValue: 'foo'
- // })
-
- // expect(updateOps[1]).toEqual({
- // type: NodeOpTypes.SET_TEXT,
- // targetNode: (root.children[0] as TestElement).children[0],
- // text: 'bar'
- // })
- // })
-
- // it('should be able to serialize nodes', async () => {
- // class App extends Component {
- // render() {
- // return h(
- // 'div',
- // {
- // id: 'test'
- // },
- // [h('span', 'foo'), 'hello']
- // )
- // }
- // }
- // const root = nodeOps.createElement('div')
- // await render(h(App), root)
- // expect(serialize(root)).toEqual(
- // `<div><div id="test"><span>foo</span>hello</div></div>`
- // )
- // expect(serialize(root, 2)).toEqual(
- // `<div>
- // <div id="test">
- // <span>
- // foo
- // </span>
- // hello
- // </div>
- // </div>`
- // )
- // })
-
- // it('should be able to trigger events', async () => {
- // class App extends Component {
- // count = 0
- // inc() {
- // this.count++
- // }
- // render() {
- // return h(
- // 'div',
- // {
- // onClick: this.inc
- // },
- // this.count
- // )
- // }
- // }
- // const app = await renderInstance(App)
- // triggerEvent(app.$el, 'click')
- // expect(app.count).toBe(1)
- // await nextTick()
- // expect(serialize(app.$el)).toBe(`<div>1</div>`)
- // })
+ it('should record ops', async () => {
+ const state = reactive({
+ id: 'test',
+ text: 'hello'
+ })
+
+ const App = {
+ render() {
+ return h(
+ 'div',
+ {
+ id: state.id
+ },
+ state.text
+ )
+ }
+ }
+ const root = nodeOps.createElement('div')
+
+ resetOps()
+ render(h(App), root)
+ const ops = dumpOps()
+
+ expect(ops.length).toBe(4)
+
+ expect(ops[0]).toEqual({
+ type: NodeOpTypes.CREATE,
+ nodeType: NodeTypes.ELEMENT,
+ tag: 'div',
+ targetNode: root.children[0]
+ })
+
+ expect(ops[1]).toEqual({
+ type: NodeOpTypes.PATCH,
+ targetNode: root.children[0],
+ propKey: 'id',
+ propPrevValue: null,
+ propNextValue: 'test'
+ })
+
+ expect(ops[2]).toEqual({
+ type: NodeOpTypes.SET_ELEMENT_TEXT,
+ text: 'hello',
+ targetNode: root.children[0]
+ })
+
+ expect(ops[3]).toEqual({
+ type: NodeOpTypes.INSERT,
+ targetNode: root.children[0],
+ parentNode: root,
+ refNode: null
+ })
+
+ // test update ops
+ state.id = 'foo'
+ state.text = 'bar'
+ await nextTick()
+
+ const updateOps = dumpOps()
+ expect(updateOps.length).toBe(2)
+
+ expect(updateOps[0]).toEqual({
+ type: NodeOpTypes.PATCH,
+ targetNode: root.children[0],
+ propKey: 'id',
+ propPrevValue: 'test',
+ propNextValue: 'foo'
+ })
+
+ expect(updateOps[1]).toEqual({
+ type: NodeOpTypes.SET_ELEMENT_TEXT,
+ targetNode: root.children[0],
+ text: 'bar'
+ })
+ })
+
+ it('should be able to serialize nodes', () => {
+ const App = {
+ render() {
+ return h(
+ 'div',
+ {
+ id: 'test'
+ },
+ [h('span', 0, 'foo'), 'hello']
+ )
+ }
+ }
+ const root = nodeOps.createElement('div')
+ render(h(App), root)
+ expect(serialize(root)).toEqual(
+ `<div><div id="test"><span>foo</span>hello</div></div>`
+ )
+ // indented output
+ expect(serialize(root, 2)).toEqual(
+ `<div>
+ <div id="test">
+ <span>
+ foo
+ </span>
+ hello
+ </div>
+</div>`
+ )
+ })
+
+ it('should be able to trigger events', async () => {
+ const count = ref(0)
+
+ const App = () => {
+ return h(
+ 'span',
+ {
+ onClick: () => {
+ count.value++
+ }
+ },
+ count.value
+ )
+ }
+
+ const root = nodeOps.createElement('div')
+ render(h(App), root)
+ triggerEvent(root.children[0] as TestElement, 'click')
+ expect(count.value).toBe(1)
+ await nextTick()
+ expect(serialize(root)).toBe(`<div><span>1</span></div>`)
+ })
})