devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
95 lines (94 loc) • 2.81 kB
JavaScript
/**
* DevExtreme (esm/__internal/ui/scroll_view/utils/get_relative_offset.test.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
describe,
expect,
it
} from "@jest/globals";
import {
getRelativeOffset
} from "./get_relative_offset";
describe("getRelativeOffset(targetElementClass, sourceElement)", (() => {
it("should return correct relative offset", (() => {
const targetElement = {
getBoundingClientRect: () => ({
left: -70,
top: 20
}),
classList: {
contains: elementClass => "dx-scrollable-content" === elementClass
}
};
const sourceEl = {
getBoundingClientRect: () => ({
left: 35,
top: 125
}),
offsetParent: targetElement,
classList: {
contains: () => false
}
};
expect(getRelativeOffset(targetElement, sourceEl)).toEqual({
left: 105,
top: 105
})
}));
it("should not cause any errors if element not have offsetParent", (() => {
const sourceEl = {
getBoundingClientRect: () => ({
left: 35,
top: 125
}),
classList: {
contains: () => false
}
};
expect(getRelativeOffset.bind([({}, sourceEl)])).not.toThrow();
expect(getRelativeOffset("", sourceEl)).toEqual({
top: 0,
left: 0
})
}));
it("should return correct relative offset with intermediate element", (() => {
const targetElement = {
getBoundingClientRect: () => ({
left: 8,
top: 326
}),
classList: {
contains: () => true
}
};
const intermediateElement = {
getBoundingClientRect: () => ({
left: 8,
top: 376
}),
offsetParent: targetElement,
classList: {
contains: () => false
}
};
const sourceEl = {
getBoundingClientRect: () => ({
left: 8,
top: 376
}),
offsetParent: intermediateElement,
classList: {
contains: () => false
}
};
expect(getRelativeOffset(targetElement, sourceEl)).toEqual({
left: 0,
top: 50
})
}))
}));