Leaflet/spec/suites/geometry/LineUtilSpec.js

76 lines
1.9 KiB
JavaScript
Raw Normal View History

2013-02-05 19:51:27 +08:00
describe('LineUtil', function () {
describe('#clipSegment', function () {
var bounds;
beforeEach(function () {
bounds = L.bounds([5, 0], [15, 10]);
});
it('should clip segment by bounds correctly', function () {
var a = new L.Point(0, 0);
var b = new L.Point(15, 15);
var segment = L.LineUtil.clipSegment(a, b, bounds);
expect(segment[0]).toEqual(new L.Point(5, 5));
expect(segment[1]).toEqual(new L.Point(10, 10));
var c = new L.Point(5, -5);
var d = new L.Point(20, 10);
var segment2 = L.LineUtil.clipSegment(c, d, bounds);
expect(segment2[0]).toEqual(new L.Point(10, 0));
expect(segment2[1]).toEqual(new L.Point(15, 5));
});
it('should use last bit code and reject segments out of bounds', function () {
var a = new L.Point(15, 15);
var b = new L.Point(25, 20);
var segment = L.LineUtil.clipSegment(a, b, bounds, true);
expect(segment).toBe(false);
});
});
describe('#pointToSegmentDistance & #closestPointOnSegment', function () {
var p1 = new L.Point(0, 10);
var p2 = new L.Point(10, 0);
var p = new L.Point(0, 0);
it('should calculate distance from point to segment', function () {
expect(L.LineUtil.pointToSegmentDistance(p, p1, p2)).toEqual(Math.sqrt(200) / 2);
});
it('should get point closest to segment', function () {
expect(L.LineUtil.closestPointOnSegment(p, p1, p2)).toEqual(new L.Point(5, 5));
});
});
describe('#simplify', function () {
it('should simplify polylines according to tolerance', function () {
var points = [
new L.Point(0, 0),
new L.Point(0.01, 0),
new L.Point(0.5, 0.01),
new L.Point(0.7, 0),
new L.Point(1, 0),
new L.Point(1.999, 0.999),
new L.Point(2, 1)
];
var simplified = L.LineUtil.simplify(points, 0.1);
expect(simplified).toEqual([
new L.Point(0, 0),
new L.Point(1, 0),
new L.Point(2, 1)
]);
});
});
});