This commit is contained in:
cyril 2025-06-18 16:40:19 +03:00 committed by GitHub
commit 807ccbd8f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 53 additions and 6 deletions

View File

@ -33,10 +33,26 @@ describe('renderList', () => {
renderList(3.1, () => {})
} catch (e) {}
expect(
`The v-for range expect an integer value but got 3.1.`,
`The v-for range expects a positive integer value but got 3.1.`,
).toHaveBeenWarned()
})
it('should warn when given a negative N', () => {
try {
renderList(-1, () => {})
} catch (e) {}
expect(
`The v-for range expects a positive integer value but got -1.`,
).toHaveBeenWarned()
})
it('should NOT warn when given 0', () => {
renderList(0, () => {})
expect(
`The v-for range expects a positive integer value but got 0.`,
).not.toHaveBeenWarned()
})
it('should render properties in an object', () => {
expect(
renderList(
@ -58,6 +74,12 @@ describe('renderList', () => {
).toEqual(['node 0: 1', 'node 1: 2', 'node 2: 3'])
})
it('should return empty array when source is 0', () => {
expect(
renderList(0, (item, index) => `node ${index}: ${item}`),
).toEqual([])
})
it('should return empty array when source is undefined', () => {
expect(
renderList(undefined, (item, index) => `node ${index}: ${item}`),

View File

@ -91,8 +91,10 @@ export function renderList(
)
}
} else if (typeof source === 'number') {
if (__DEV__ && !Number.isInteger(source)) {
warn(`The v-for range expect an integer value but got ${source}.`)
if (__DEV__ && (!Number.isInteger(source) || source < 0)) {
warn(
`The v-for range expects a positive integer value but got ${source}.`,
)
}
ret = new Array(source)
for (let i = 0; i < source; i++) {

View File

@ -27,10 +27,24 @@ describe('ssr: renderList', () => {
it('should warn when given a non-integer N', () => {
ssrRenderList(3.1, () => {})
expect(
`The v-for range expect an integer value but got 3.1.`,
`The v-for range expects a positive integer value but got 3.1.`,
).toHaveBeenWarned()
})
it('should warn when given a negative N', () => {
ssrRenderList(-1, () => {})
expect(
`The v-for range expects a positive integer value but got -1.`,
).toHaveBeenWarned()
})
it('should NOT warn when given 0', () => {
ssrRenderList(0, () => {})
expect(
`The v-for range expects a positive integer value but got 0.`,
).not.toHaveBeenWarned()
})
it('should render properties in an object', () => {
ssrRenderList({ a: 1, b: 2, c: 3 }, (item, key, index) =>
stack.push(`node ${index}/${key}: ${item}`),
@ -51,6 +65,13 @@ describe('ssr: renderList', () => {
expect(stack).toEqual(['node 0: 1', 'node 1: 2', 'node 2: 3'])
})
it('should not render items when source is 0', () => {
ssrRenderList(0, (item, index) =>
stack.push(`node ${index}: ${item}`),
)
expect(stack).toEqual([])
})
it('should not render items when source is undefined', () => {
ssrRenderList(undefined, (item, index) =>
stack.push(`node ${index}: ${item}`),

View File

@ -10,8 +10,10 @@ export function ssrRenderList(
renderItem(source[i], i)
}
} else if (typeof source === 'number') {
if (__DEV__ && !Number.isInteger(source)) {
warn(`The v-for range expect an integer value but got ${source}.`)
if (__DEV__ && (!Number.isInteger(source) || source < 0)) {
warn(
`The v-for range expects a positive integer value but got ${source}.`,
)
return
}
for (let i = 0; i < source; i++) {