mirror of
https://github.com/tenrok/OverlayScrollbars.git
synced 2026-06-07 06:42:26 +03:00
253 lines
5.5 KiB
TypeScript
253 lines
5.5 KiB
TypeScript
import { defaultOptions, getOptionsDiff } from 'options';
|
|
|
|
describe('options', () => {
|
|
test('defaultOptions', () => {
|
|
expect(defaultOptions).toEqual({
|
|
resize: 'none',
|
|
paddingAbsolute: false,
|
|
updating: {
|
|
elementEvents: [['img', 'load']],
|
|
attributes: null,
|
|
debounce: [0, 33],
|
|
},
|
|
overflow: {
|
|
x: 'scroll',
|
|
y: 'scroll',
|
|
},
|
|
scrollbars: {
|
|
visibility: 'auto',
|
|
autoHide: 'never',
|
|
autoHideDelay: 800,
|
|
dragScroll: true,
|
|
clickScroll: false,
|
|
touch: true,
|
|
},
|
|
textarea: {
|
|
dynWidth: false,
|
|
dynHeight: false,
|
|
inheritedAttrs: ['style', 'class'],
|
|
},
|
|
nativeScrollbarsOverlaid: {
|
|
show: false,
|
|
initialize: false,
|
|
},
|
|
callbacks: {
|
|
onUpdated: null,
|
|
},
|
|
});
|
|
});
|
|
|
|
describe('getOptionsDiff', () => {
|
|
test('diff simple options', () => {
|
|
const options = {
|
|
a: 1,
|
|
b: 2,
|
|
c: 3,
|
|
d: 4,
|
|
e: 5,
|
|
};
|
|
const changed = {
|
|
a: 0,
|
|
b: 0,
|
|
};
|
|
|
|
expect(getOptionsDiff(options, changed)).toEqual(changed);
|
|
|
|
expect(
|
|
getOptionsDiff(options, {
|
|
...options,
|
|
...changed,
|
|
})
|
|
).toEqual(changed);
|
|
});
|
|
|
|
test('diff nested options', () => {
|
|
const options = {
|
|
a: 1,
|
|
b: 2,
|
|
c: 3,
|
|
d: 4,
|
|
e: 5,
|
|
deep: {
|
|
a: 1,
|
|
b: 2,
|
|
c: 3,
|
|
d: 4,
|
|
},
|
|
};
|
|
const changed = {
|
|
a: 0,
|
|
b: 0,
|
|
deep: {
|
|
a: 0,
|
|
b: 0,
|
|
},
|
|
};
|
|
|
|
expect(getOptionsDiff(options, changed)).toEqual(changed);
|
|
|
|
expect(
|
|
getOptionsDiff(options, {
|
|
...options,
|
|
...changed,
|
|
})
|
|
).toEqual(changed);
|
|
|
|
expect(
|
|
getOptionsDiff(options, {
|
|
...options,
|
|
...changed,
|
|
deep: {
|
|
...options.deep,
|
|
...changed.deep,
|
|
},
|
|
})
|
|
).toEqual(changed);
|
|
});
|
|
|
|
test('diff foreign options', () => {
|
|
const options = {
|
|
a: 1,
|
|
b: 2,
|
|
c: 3,
|
|
};
|
|
const changed = {
|
|
a: 0,
|
|
d: 4,
|
|
e: 5,
|
|
};
|
|
|
|
expect(getOptionsDiff(options, changed)).toEqual(changed);
|
|
|
|
expect(
|
|
getOptionsDiff(options, {
|
|
...options,
|
|
...changed,
|
|
})
|
|
).toEqual(changed);
|
|
});
|
|
|
|
describe('diff arrays', () => {
|
|
test('dont diff same looking arrays with primitve values', () => {
|
|
const options = {
|
|
a: [],
|
|
b: [1, 2, 3],
|
|
c: ['1', '2', '3'],
|
|
d: [true, false, false],
|
|
};
|
|
const changed = {
|
|
a: [],
|
|
b: [1, 2, 3],
|
|
c: ['1', '2', '3'],
|
|
d: [true, false, false],
|
|
};
|
|
|
|
expect(
|
|
getOptionsDiff(options, {
|
|
...options,
|
|
...changed,
|
|
})
|
|
).toEqual({});
|
|
|
|
expect(getOptionsDiff(options, changed)).toEqual({});
|
|
});
|
|
|
|
test('dont diff same looking arrays with non-primitve values', () => {
|
|
const options = {
|
|
a: [],
|
|
b: [{ a: 1 }, { b: 2 }, { c: 3 }, ['tuple1', 'tuple2'], []],
|
|
c: [
|
|
['tuple1', 'tuple2'],
|
|
['tuple1', 'tuple2'],
|
|
['tuple1', 'tuple2'],
|
|
],
|
|
};
|
|
const changed = {
|
|
a: [],
|
|
b: [{ a: 1 }, { b: 2 }, { c: 3 }, ['tuple1', 'tuple2'], []],
|
|
c: [
|
|
['tuple1', 'tuple2'],
|
|
['tuple1', 'tuple2'],
|
|
['tuple1', 'tuple2'],
|
|
],
|
|
};
|
|
|
|
expect(
|
|
getOptionsDiff(options, {
|
|
...options,
|
|
...changed,
|
|
})
|
|
).toEqual({});
|
|
|
|
expect(getOptionsDiff(options, changed)).toEqual({});
|
|
});
|
|
|
|
test('diff arrays with primitve values', () => {
|
|
const options = {
|
|
a: [] as string[],
|
|
b: [1, 2, 3],
|
|
c: ['1', '2', '3'],
|
|
d: [true, false, false],
|
|
};
|
|
const changed = {
|
|
a: ['hello'],
|
|
b: [1, 2, 3, 4],
|
|
c: ['1', '2', '3', '4'],
|
|
d: [true, false, false, true],
|
|
};
|
|
|
|
expect(
|
|
getOptionsDiff(options, {
|
|
...options,
|
|
...changed,
|
|
})
|
|
).toEqual(changed);
|
|
|
|
expect(getOptionsDiff(options, changed)).toEqual(changed);
|
|
});
|
|
|
|
test('diff arrays with mixed values', () => {
|
|
const options = {
|
|
a: [] as Record<string, unknown>[],
|
|
b: [1, 2, 3] as Array<number | (() => void)>,
|
|
c: ['1', '2', '3'] as Array<string | Record<string, unknown>>,
|
|
d: [true, false, false],
|
|
};
|
|
const changed = {
|
|
a: [{}],
|
|
b: [1, 2, 3, () => {}],
|
|
c: ['1', '2', '3', {}],
|
|
};
|
|
|
|
expect(getOptionsDiff(options, changed)).toEqual(changed);
|
|
|
|
expect(
|
|
getOptionsDiff(options, {
|
|
...options,
|
|
...changed,
|
|
})
|
|
).toEqual(changed);
|
|
});
|
|
|
|
test('diff same looking arrays with not serializable values', () => {
|
|
const fn = () => {};
|
|
const options = {
|
|
c: [fn, fn, () => {}],
|
|
};
|
|
const changed = {
|
|
c: [fn, fn, () => {}],
|
|
};
|
|
|
|
expect(
|
|
getOptionsDiff(options, {
|
|
...options,
|
|
...changed,
|
|
})
|
|
).toEqual(changed);
|
|
|
|
expect(getOptionsDiff(options, changed)).toEqual(changed);
|
|
});
|
|
});
|
|
});
|
|
});
|