--- /dev/null
+import {
+ defineComponent,
+ h,
+ nodeOps,
+ render,
+ SetupContext
+} from '@vue/runtime-test'
+import { defineEmit, defineProps, useContext } from '../src/apiSetupHelpers'
+
+describe('SFC <script setup> helpers', () => {
+ test('should warn runtime usage', () => {
+ defineProps()
+ expect(`defineProps() is a compiler-hint`).toHaveBeenWarned()
+
+ defineEmit()
+ expect(`defineEmit() is a compiler-hint`).toHaveBeenWarned()
+ })
+
+ test('useContext (no args)', () => {
+ let ctx: SetupContext | undefined
+ const Comp = {
+ setup() {
+ ctx = useContext()
+ return () => {}
+ }
+ }
+ render(h(Comp), nodeOps.createElement('div'))
+ expect(ctx).toMatchObject({
+ attrs: {},
+ slots: {}
+ })
+ expect(typeof ctx!.emit).toBe('function')
+ })
+
+ test('useContext (with args)', () => {
+ let ctx: SetupContext | undefined
+ let ctxArg: SetupContext | undefined
+ const Comp = defineComponent({
+ setup(_, _ctxArg) {
+ ctx = useContext()
+ ctxArg = _ctxArg
+ return () => {}
+ }
+ })
+ render(h(Comp), nodeOps.createElement('div'))
+ expect(ctx).toBeDefined()
+ expect(ctx).toBe(ctxArg)
+ })
+})
InferredProps = ExtractPropTypes<PP>
>(props?: PP): Readonly<TypeProps extends undefined ? InferredProps : TypeProps>
// implementation
-export function defineProps(props?: any) {
- if (__DEV__ && props) {
+export function defineProps() {
+ if (__DEV__) {
warn(
`defineProps() is a compiler-hint helper that is only usable inside ` +
`<script setup> of a single file component. Its arguments should be ` +
InferredEmit = EmitFn<E>
>(emitOptions?: E | EE[]): TypeEmit extends undefined ? InferredEmit : TypeEmit
// implementation
-export function defineEmit(emitOptions?: any) {
- if (__DEV__ && emitOptions) {
+export function defineEmit() {
+ if (__DEV__) {
warn(
`defineEmit() is a compiler-hint helper that is only usable inside ` +
`<script setup> of a single file component. Its arguments should be ` +