@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering.
131 lines (118 loc) • 4.2 kB
text/typescript
import { Rectangle, Ellipse, Polyline, Path } from '../../geometry'
import { Vector } from '../vector'
import { setupTest, clearnTest } from './elem.test'
import { getBBox } from './geom'
describe('Dom', () => {
describe('geom', () => {
const {
svgContainer,
svgGroup,
svgGroup1,
svgCircle,
svgLinearGradient,
svgEllipse,
svgPolygon,
svgRectangle,
svgPath,
foreignDiv,
} = setupTest()
afterEach(clearnTest)
describe('#bbox', () => {
it('should return a rectangle instance', () => {
expect(Vector.create('circle').bbox()).toBeInstanceOf(Rectangle)
expect(Vector.create(svgCircle).bbox()).toBeInstanceOf(Rectangle)
expect(Vector.create(svgCircle).bbox(true)).toBeInstanceOf(Rectangle)
expect(Vector.create(svgCircle).bbox(true, svgGroup1)).toBeInstanceOf(
Rectangle,
)
expect(Vector.create(svgLinearGradient).bbox()).toBeInstanceOf(
Rectangle,
)
})
})
describe('#getBBox', () => {
it('should return a rectangle instance', () => {
expect(Vector.create('circle').getBBox()).toBeInstanceOf(Rectangle)
expect(Vector.create(svgCircle).getBBox()).toBeInstanceOf(Rectangle)
expect(Vector.create(svgCircle).getBBox({})).toBeInstanceOf(Rectangle)
expect(Vector.create(svgLinearGradient).getBBox()).toBeInstanceOf(
Rectangle,
)
expect(
Vector.create(svgCircle).getBBox({ recursive: true }),
).toBeInstanceOf(Rectangle)
expect(
Vector.create(svgGroup).getBBox({ recursive: true }),
).toBeInstanceOf(Rectangle)
expect(
Vector.create(svgGroup).getBBox({ target: svgContainer }),
).toBeInstanceOf(Rectangle)
expect(
Vector.create(svgGroup).getBBox({ target: svgCircle }),
).toBeInstanceOf(Rectangle)
expect(
Vector.create(svgGroup1).getBBox({ recursive: true }),
).toBeInstanceOf(Rectangle)
expect(
Vector.create(svgGroup1).getBBox({ target: svgContainer }),
).toBeInstanceOf(Rectangle)
expect(
Vector.create(svgGroup1).getBBox({ target: svgCircle }),
).toBeInstanceOf(Rectangle)
expect(
Vector.create(svgLinearGradient).getBBox({ recursive: true }),
).toBeInstanceOf(Rectangle)
expect(
Vector.create(svgLinearGradient).getBBox({
target: svgContainer,
}),
).toBeInstanceOf(Rectangle)
expect(
Vector.create(svgLinearGradient).getBBox({ target: svgCircle }),
).toBeInstanceOf(Rectangle)
expect(getBBox(foreignDiv as any)).toBeInstanceOf(Rectangle)
})
})
describe('#toLocalPoint', () => {
it('convert absolute coordinates to coordinates relative to svgContainer', () => {
const { x, y } = svgContainer.getBoundingClientRect()
const { x: localX, y: localY } = Vector.create(
svgContainer,
).toLocalPoint(x, y)
expect(localX).toBe(0)
expect(localY).toBe(0)
})
})
describe('#toGeometryShape', () => {
it('convert the SVGElement to an equivalent geometric shap', () => {
expect(Vector.create(svgEllipse).toGeometryShape()).toBeInstanceOf(
Ellipse,
)
expect(Vector.create(svgCircle).toGeometryShape()).toBeInstanceOf(
Ellipse,
)
expect(Vector.create(svgPolygon).toGeometryShape()).toBeInstanceOf(
Polyline,
)
expect(Vector.create(svgRectangle).toGeometryShape()).toBeInstanceOf(
Rectangle,
)
expect(Vector.create(svgPath).toGeometryShape()).toBeInstanceOf(Path)
expect(Vector.create(svgGroup).toGeometryShape()).toBeInstanceOf(
Rectangle,
)
})
})
describe('#animateAlongPath', () => {
it('should not throw error', () => {
let result = true
try {
Vector.create(svgEllipse).animateAlongPath({}, svgPath)
} catch (e) {
result = false
}
expect(result).toBeTruthy()
})
})
})
})