UNPKG

bootstrap-vue

Version:

With more than 85 components, over 45 available plugins, several directives, and 1000+ icons, BootstrapVue provides one of the most comprehensive implementations of the Bootstrap v4 component and grid system available for Vue.js v2.6, complete with extens

110 lines (99 loc) 3.52 kB
import { get } from './get' describe('get', () => { it('handles invalid values gracefully', async () => { expect(get(null, '')).toBe(null) expect(get({}, null)).toBe(null) expect(get({}, '')).toBe(null) expect(get({}, 'a')).toBe(null) expect(get({}, [])).toBe(null) expect(get({ a: 'b' }, 'b')).toBe(null) expect(get({ a: { c: 'd' } }, 'a.d')).toBe(null) }) it('returns expected default value', async () => { expect(get(null, '')).toBe(null) expect(get({}, null, undefined)).toBe(null) expect(get({}, '', true)).toBe(true) expect(get({}, 'a', '')).toBe('') expect(get({}, [], 0)).toBe(0) expect(get({ a: 'b' }, 'b', {})).toEqual({}) expect(get({ a: { c: 'd' } }, 'a.d', [])).toEqual([]) expect(get({ a: { c: undefined } }, 'a.c')).toBe(null) expect(get({ a: 0, b: false }, 'c')).toBe(null) }) it('returns expected value', async () => { const obj1 = { a: 'b' } const obj2 = { a: { b: { c: { d: 'e' } } } } const obj3 = { a: [{ b: 'c' }] } const obj4 = { a: [[{ b: 'c' }], [{ d: { e: ['f'] } }]] } const obj5 = { a: { b: 0, c: '', d: false } } const obj6 = { a: 0, b: false } expect(get(obj1, 'a')).toBe('b') expect(get(obj1, ['a'])).toBe('b') expect(get(obj2, 'a.b.c.d')).toBe('e') expect(get(obj2, ['a', 'b', 'c', 'd'])).toBe('e') expect(get(obj3, 'a[0].b')).toBe('c') expect(get(obj3, ['a', 0, 'b'])).toBe('c') expect(get(obj4, 'a[1][0].d.e[0]')).toBe('f') expect(get(obj4, ['a', 1, 0, 'd', 'e', 0])).toBe('f') expect(get(obj4, ['a[1]', 0, 'd', 'e[0]'])).toBe('f') expect(get(obj5, 'a.b')).toBe(0) expect(get(obj5, 'a.c')).toBe('') expect(get(obj5, 'a.d')).toBe(false) expect(get(obj6, 'a')).toBe(0) expect(get(obj6, 'b')).toBe(false) }) it('handles when field name has dot', async () => { // https://github.com/bootstrap-vue/bootstrap-vue/issues/2762 const obj1 = { 'a.b': 'foo', a: { b: 'fiz' }, c: 'bar', d: { e: 'baz' }, f: { 'g.h': 'faz' }, 'i.j.k': 'fuz' } const obj2 = { a: { b: 'fiz' }, c: 'bar', d: { e: 'baz' } } expect(get(obj1, 'a.b')).toBe('foo') expect(get(obj1, 'c')).toBe('bar') expect(get(obj1, 'd.e')).toBe('baz') expect(get(obj1, 'f.g.h', 'zzz')).toBe('zzz') expect(get(obj1, 'f.g.h')).toBe(null) expect(get(obj1, 'f.g', 'zzz')).toBe('zzz') expect(get(obj1, 'f.g')).toBe(null) expect(get(obj1, 'i.j.k')).toBe('fuz') expect(get(obj1, 'i.j', 'zzz')).toBe('zzz') expect(get(obj1, 'i.j')).toBe(null) expect(get({ a: 'b' }, '...', true)).toBe(true) expect(get({ a: 'b' }, '...')).toBe(null) expect(get(obj2, 'a.b')).toBe('fiz') expect(get(obj2, 'c')).toBe('bar') expect(get(obj2, 'd.e')).toBe('baz') }) it('handles when field value is not array or object', async () => { // https://github.com/bootstrap-vue/bootstrap-vue/issues/2807 const obj1 = { a: { b: 'c' }, b: [{ c: 'd' }], c: { d: { e: 'f' } }, d: [{ e: [{ f: 'g' }] }] } const obj2 = { a: null, b: undefined, c: 0, d: [null] } expect(get(obj1, 'a.b')).toBe('c') expect(get(obj2, 'a.b')).toBe(null) expect(get(obj1, 'b[0].c')).toBe('d') expect(get(obj2, 'b[0].c')).toBe(null) expect(get(obj1, 'c.d.e')).toBe('f') expect(get(obj2, 'c.d.e')).toBe(null) expect(get(obj1, 'd[0].e[0].f')).toBe('g') expect(get(obj2, 'd[0].e[0].f')).toBe(null) }) })