Skip to content

Commit

Permalink
fix(compiler-sfc): add test for vuejs#5808
Browse files Browse the repository at this point in the history
  • Loading branch information
liulinboyi committed Apr 27, 2022
1 parent 1f75ab5 commit dc5ad36
Show file tree
Hide file tree
Showing 2 changed files with 220 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,173 @@ return { }
}"
`;

exports[`SFC compile <script setup> async/await detection multiple \`if for\` nested statements 1`] = `
"import { withAsyncContext as _withAsyncContext } from 'vue'

export default {
async setup(__props, { expose }) {
expose();

let __temp, __restore
if (ok) {
for (let a of [1,2,3]) {
(
([__temp,__restore] = _withAsyncContext(() => a)),
await __temp,
__restore()
)
}
for (let a of [1,2,3]) {
(
([__temp,__restore] = _withAsyncContext(() => a)),
await __temp,
__restore()
)
;(
([__temp,__restore] = _withAsyncContext(() => a)),
await __temp,
__restore()
)
}
}
return { }
}

}"
`;

exports[`SFC compile <script setup> async/await detection multiple \`if while\` nested statements 1`] = `
"import { withAsyncContext as _withAsyncContext } from 'vue'

export default {
async setup(__props, { expose }) {
expose();

let __temp, __restore
if (ok) {
while (d) {
(
([__temp,__restore] = _withAsyncContext(() => 5)),
await __temp,
__restore()
)
}
while (d) {
(
([__temp,__restore] = _withAsyncContext(() => 5)),
await __temp,
__restore()
)
;(
([__temp,__restore] = _withAsyncContext(() => 6)),
await __temp,
__restore()
)
if (c) {
let f = 10
10 + (
([__temp,__restore] = _withAsyncContext(() => 7)),
__temp = await __temp,
__restore(),
__temp
)
} else {
(
([__temp,__restore] = _withAsyncContext(() => 8)),
await __temp,
__restore()
)
;(
([__temp,__restore] = _withAsyncContext(() => 9)),
await __temp,
__restore()
)
}
}
}
return { }
}

}"
`;

exports[`SFC compile <script setup> async/await detection multiple \`if\` nested statements 1`] = `
"import { withAsyncContext as _withAsyncContext } from 'vue'

export default {
async setup(__props, { expose }) {
expose();

let __temp, __restore
if (ok) {
let a = 'foo'
;(
([__temp,__restore] = _withAsyncContext(() => 0)),
__temp = await __temp,
__restore(),
__temp
) + (
([__temp,__restore] = _withAsyncContext(() => 1)),
__temp = await __temp,
__restore(),
__temp
)
;(
([__temp,__restore] = _withAsyncContext(() => 2)),
await __temp,
__restore()
)
} else if (a) {
(
([__temp,__restore] = _withAsyncContext(() => 10)),
await __temp,
__restore()
)
if (b) {
(
([__temp,__restore] = _withAsyncContext(() => 0)),
__temp = await __temp,
__restore(),
__temp
) + (
([__temp,__restore] = _withAsyncContext(() => 1)),
__temp = await __temp,
__restore(),
__temp
)
} else {
let a = 'foo'
;(
([__temp,__restore] = _withAsyncContext(() => 2)),
await __temp,
__restore()
)
}
if (b) {
(
([__temp,__restore] = _withAsyncContext(() => 3)),
await __temp,
__restore()
)
;(
([__temp,__restore] = _withAsyncContext(() => 4)),
await __temp,
__restore()
)
}
} else {
(
([__temp,__restore] = _withAsyncContext(() => 5)),
await __temp,
__restore()
)
}
return { }
}

}"
`;

exports[`SFC compile <script setup> async/await detection nested await 1`] = `
"import { withAsyncContext as _withAsyncContext } from 'vue'

Expand Down
53 changes: 53 additions & 0 deletions packages/compiler-sfc/__tests__/compileScript.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1164,6 +1164,59 @@ const emit = defineEmits(['a', 'b'])
assertAwaitDetection(`if (ok) { await foo } else { await bar }`)
})

test('multiple `if` nested statements', () => {
assertAwaitDetection(`if (ok) {
let a = 'foo'
await 0 + await 1
await 2
} else if (a) {
await 10
if (b) {
await 0 + await 1
} else {
let a = 'foo'
await 2
}
if (b) {
await 3
await 4
}
} else {
await 5
}`)
})

test('multiple `if while` nested statements', () => {
assertAwaitDetection(`if (ok) {
while (d) {
await 5
}
while (d) {
await 5
await 6
if (c) {
let f = 10
10 + await 7
} else {
await 8
await 9
}
}
}`)
})

test('multiple `if for` nested statements', () => {
assertAwaitDetection(`if (ok) {
for (let a of [1,2,3]) {
await a
}
for (let a of [1,2,3]) {
await a
await a
}
}`)
})

test('should ignore await inside functions', () => {
// function declaration
assertAwaitDetection(`async function foo() { await bar }`, false)
Expand Down

0 comments on commit dc5ad36

Please sign in to comment.