]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
test: wip tests for inheritance and mixins
authorEvan You <yyx990803@gmail.com>
Wed, 17 Oct 2018 21:36:34 +0000 (17:36 -0400)
committerEvan You <yyx990803@gmail.com>
Wed, 17 Oct 2018 21:36:34 +0000 (17:36 -0400)
packages/core/__tests__/inheritance.spec.ts [new file with mode: 0644]
packages/core/__tests__/mixins.spec.ts [new file with mode: 0644]
packages/renderer-test/src/index.ts

diff --git a/packages/core/__tests__/inheritance.spec.ts b/packages/core/__tests__/inheritance.spec.ts
new file mode 100644 (file)
index 0000000..09dc4bd
--- /dev/null
@@ -0,0 +1,44 @@
+import { Component, createInstance } from '@vue/renderer-test'
+
+describe('class inheritance', () => {
+  it('should merge data', () => {
+    class Base extends Component {
+      foo = 1
+      data() {
+        return {
+          bar: 2
+        }
+      }
+    }
+
+    class Child extends Base {
+      foo: number
+      bar: number
+      baz: number
+      qux: number = 4
+
+      data(): any {
+        return {
+          baz: 3
+        }
+      }
+    }
+
+    const child = createInstance(Child)
+
+    expect(child.foo).toBe(1)
+    expect(child.bar).toBe(2)
+    expect(child.baz).toBe(3)
+    expect(child.qux).toBe(4)
+  })
+
+  it('should merge props', () => {})
+
+  it('should merge lifecycle hooks', () => {})
+
+  it('should merge watchers', () => {})
+
+  it('should inherit methods', () => {})
+
+  it('should inherit computed properties', () => {})
+})
diff --git a/packages/core/__tests__/mixins.spec.ts b/packages/core/__tests__/mixins.spec.ts
new file mode 100644 (file)
index 0000000..b7a1bc4
--- /dev/null
@@ -0,0 +1,7 @@
+describe('mixins', () => {
+  it('should work with classes', () => {})
+
+  it('should work with objects', () => {})
+
+  it('should work with a mix of objects and classes', () => {})
+})
index fda7490c926b5678552bf17bde503d5fd0764e7b..74611f7fea0831b0952bc062d2fc90a91301e71f 100644 (file)
@@ -1,4 +1,10 @@
-import { createRenderer, VNode, Component } from '@vue/core'
+import {
+  h,
+  createRenderer,
+  VNode,
+  Component,
+  createComponentInstance
+} from '@vue/core'
 import { nodeOps, TestElement } from './nodeOps'
 import { patchData } from './patchData'
 
@@ -13,6 +19,20 @@ type publicRender = (
 ) => Component | null
 export const render = _render as publicRender
 
+export function createInstance<T extends Component>(
+  Class: new () => T,
+  props?: any
+): T {
+  return createComponentInstance(h(Class, props)).$proxy as any
+}
+
+export function renderIntsance<T extends Component>(
+  Class: new () => T,
+  props?: any
+): T {
+  return render(h(Class, props), nodeOps.createElement('div')) as any
+}
+
 export { serialize } from './serialize'
 export * from './nodeOps'
 export * from '@vue/core'