diff --git a/packages/runtime-dom/__tests__/directives/vOn.spec.ts b/packages/runtime-dom/__tests__/directives/vOn.spec.ts index e2417d95677..e0b0da879a2 100644 --- a/packages/runtime-dom/__tests__/directives/vOn.spec.ts +++ b/packages/runtime-dom/__tests__/directives/vOn.spec.ts @@ -41,9 +41,9 @@ describe('runtime-dom: v-on directive', () => { }) test('it should support key modifiers and system modifiers', () => { - const keyNames = ["ctrl","shift","meta","alt"] + const keyNames = ['ctrl', 'shift', 'meta', 'alt'] - keyNames.forEach(keyName=>{ + keyNames.forEach(keyName => { const el = document.createElement('div') const fn = jest.fn() //
@@ -52,28 +52,28 @@ describe('runtime-dom: v-on directive', () => { 'arrow-left' ]) patchEvent(el, 'onKeyup', null, nextValue, null) - + triggerEvent(el, 'keyup', e => (e.key = 'a')) expect(fn).not.toBeCalled() - + triggerEvent(el, 'keyup', e => { e[`${keyName}Key`] = false e.key = 'esc' }) expect(fn).not.toBeCalled() - + triggerEvent(el, 'keyup', e => { e[`${keyName}Key`] = true e.key = 'Escape' }) expect(fn).toBeCalledTimes(1) - + triggerEvent(el, 'keyup', e => { e[`${keyName}Key`] = true e.key = 'ArrowLeft' }) expect(fn).toBeCalledTimes(2) - }); + }) }) test('it should support "exact" modifier', () => { diff --git a/packages/shared/__tests__/looseEqual.spec.ts b/packages/shared/__tests__/looseEqual.spec.ts index fe321cd1539..75bb25058b7 100644 --- a/packages/shared/__tests__/looseEqual.spec.ts +++ b/packages/shared/__tests__/looseEqual.spec.ts @@ -54,27 +54,27 @@ describe('utils/looseEqual', () => { const date2 = new Date(2019, 1, 2, 3, 4, 5, 7) const file1 = new File([''], 'filename.txt', { type: 'text/plain', - lastModified: date1.getTime(), + lastModified: date1.getTime() }) const file2 = new File([''], 'filename.txt', { type: 'text/plain', - lastModified: date1.getTime(), + lastModified: date1.getTime() }) const file3 = new File([''], 'filename.txt', { type: 'text/plain', - lastModified: date2.getTime(), + lastModified: date2.getTime() }) const file4 = new File([''], 'filename.csv', { type: 'text/csv', - lastModified: date1.getTime(), + lastModified: date1.getTime() }) const file5 = new File(['abcdef'], 'filename.txt', { type: 'text/plain', - lastModified: date1.getTime(), + lastModified: date1.getTime() }) const file6 = new File(['12345'], 'filename.txt', { type: 'text/plain', - lastModified: date1.getTime(), + lastModified: date1.getTime() }) // Identical file object references @@ -163,7 +163,7 @@ describe('utils/looseEqual', () => { const date1 = new Date(2019, 1, 2, 3, 4, 5, 6) const file1 = new File([''], 'filename.txt', { type: 'text/plain', - lastModified: date1.getTime(), + lastModified: date1.getTime() }) expect(looseEqual(123, '123')).toBe(true) diff --git a/packages/shared/__tests__/toNumber.spec.ts b/packages/shared/__tests__/toNumber.spec.ts new file mode 100644 index 00000000000..58a46c3ebd3 --- /dev/null +++ b/packages/shared/__tests__/toNumber.spec.ts @@ -0,0 +1,16 @@ +import { toNumber } from '../src' + +describe('utils/toNumber', () => { + test('number', () => { + expect(toNumber(1)).toBe(1) + expect(toNumber(1.3)).toBe(1.3) + expect(toNumber(NaN)).toBe(NaN) + }) + + test('string', () => { + expect(toNumber('123')).toBe(123) + expect(toNumber('3.14')).toBe(3.14) + expect(toNumber('3.14')).toBe('3.14aa') + expect(toNumber('aa3.14')).toBe('aa3.14') + }) +}) diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 84b324beda3..3bd134864c1 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -160,6 +160,10 @@ export const def = (obj: object, key: string | symbol, value: any) => { } export const toNumber = (val: any): any => { + if (typeof val === 'string') { + const matched = val.match(/\d+(\.\d+)?/) + return matched ? parseFloat(matched[0]) : val + } const n = parseFloat(val) return isNaN(n) ? val : n }