quasar
Version:
Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time
88 lines (73 loc) • 2.39 kB
JavaScript
import { describe, test, expect } from 'vitest'
import extend from './extend.js'
describe('[extend API]', () => {
describe('[Functions]', () => {
describe('[(function)default]', () => {
test('simple object', () => {
expect(extend({}, { a: true, b: 2, c: 'str' })).toStrictEqual({
a: true,
b: 2,
c: 'str'
})
})
test('has correct return value', () => {
const target = {}
const result = extend(target, { a: true, b: 2, c: 'str' })
expect(result).toBe(target)
})
test('extend object (deep)', () => {
expect(extend(true, { a: { b: 2 } }, { a: { c: 3 } })).toStrictEqual({
a: { b: 2, c: 3 }
})
})
test('extend object (not deep)', () => {
expect(extend(false, { a: { b: 2 } }, { a: { c: 3 } })).toStrictEqual({
a: { c: 3 }
})
})
test('extend array (deep)', () => {
expect(
extend(true, { a: [1, 2, [3, 4]] }, { a: [[5, 6]] })
).toStrictEqual({
a: [[5, 6], 2, [3, 4]]
})
})
test('extend array (not deep)', () => {
expect(extend(false, { a: [1, 2] }, { a: [3] })).toStrictEqual({
a: [3]
})
})
test('extend array with object', () => {
expect(extend(true, { a: [1, { b: 2 }] }, { a: [3] })).toStrictEqual({
a: [3, { b: 2 }]
})
})
test.each([
['boolean', true, false],
['number', 5, 6],
['string', 'a', 'b'],
['undefined', void 0, null],
['NaN', NaN, Infinity],
['Infinity', Infinity, 5],
['Date', new Date(150), new Date(200)],
['RegExp', /./, /.aaa/],
['Array', [1, 2, 3], [1, 2, 3, 4]],
['Object', { a: true }, { a: false }]
])('extend %s', (_, a, b) => {
expect(extend({ a }, { a: b })).toStrictEqual({ a: b })
})
test('extend Date with object', () => {
const date = new Date(150)
const result = extend({}, { a: date }, { a: true })
expect(result).toStrictEqual({ a: true })
})
test('extend Fn', () => {
const fn1 = () => 5
const fn2 = () => 6
const result = extend({}, { a: fn1 }, { a: fn2 })
expect(result).toStrictEqual({ a: fn2 })
expect(result.a()).toBe(6)
})
})
})
})