module('Path');

test('path.join(path)', function() {
	var path = new Path();
	path.add(0, 0);
	path.add(10, 0);
	
	var path2 = new Path();
	path2.add(10, 0);
	path2.add(20, 10);
	
	path.join(path2);
	equals(path.segments.toString(), '{ point: { x: 0, y: 0 } },{ point: { x: 10, y: 0 } },{ point: { x: 20, y: 10 } }');
	equals(function() {
		return paper.project.activeLayer.children.length;
	}, 1);

	var path = new Path();
	path.add(0, 0);
	path.add(10, 0);
	
	var path2 = new Path();
	path2.add(20, 10);
	path2.add(10, 0);
	path.join(path2);
	equals(path.segments.toString(), '{ point: { x: 0, y: 0 } },{ point: { x: 10, y: 0 } },{ point: { x: 20, y: 10 } }');
		
	var path = new Path();
	path.add(0, 0);
	path.add(10, 0);

	var path2 = new Path();
	path2.add(30, 10);
	path2.add(40, 0);
	path.join(path2);
	equals(path.segments.toString(), '{ point: { x: 0, y: 0 } },{ point: { x: 10, y: 0 } },{ point: { x: 30, y: 10 } },{ point: { x: 40, y: 0 } }');

	var path = new Path();
	path.add(0, 0);
	path.add(10, 0);
	path.add(20, 10);

	var path2 = new Path();
	path2.add(0, 0);
	path2.add(10, 5);
	path2.add(20, 10);
	
	path.join(path2);
	
	equals(path.segments.toString(), '{ point: { x: 0, y: 0 } },{ point: { x: 10, y: 0 } },{ point: { x: 20, y: 10 } },{ point: { x: 10, y: 5 } }');
	equals(function() {
		return path.closed;
	}, true);
});

test('path.remove()', function() {
	var path = new Path();
	path.add(0, 0);
	path.add(10, 0);
	path.add(20, 0);
	path.add(30, 0);
	
	path.removeSegment(0);
	equals(function() {
		return path.segments.length;
	}, 3);

	path.removeSegment(0);
	equals(function() {
		return path.segments.length;
	}, 2);

	// TODO: shouldn't this remove two segments? The segments from index 0 till
	// index 1?
	path.removeSegments(0, 1);
	equals(function() {
		return path.segments.length;
	}, 0);

	path.remove();
	
	equals(function() {
		return paper.project.activeLayer.children.length;
	}, 0);
});

test('path.removeSegments()', function() {
	var path = new Path();
	path.add(0, 0);
	path.add(10, 0);
	path.add(20, 0);
	path.add(30, 0);

	path.removeSegments();
	equals(function() {
		return path.segments.length;
	}, 0);
});

test('Is the path deselected after setting a new list of segments?', function() {
	var path = new Path([0, 0]);
	path.selected = true;
	equals(function() {
		return path.selected;
	}, true);
	equals(function() {
		return paper.project.selectedItems.length;
	}, 1);

	path.segments = [[0, 10]];
	equals(function() {
		return path.selected;
	}, false);
	equals(function() {
		return paper.project.selectedItems.length;
	}, 0);
});

test('Path#reverse', function() {
	var path = new Path.Circle([100, 100], 30);
	path.reverse();
	equals(path.segments.toString(), '{ point: { x: 100, y: 130 }, handleIn: { x: -16.56854, y: 0 }, handleOut: { x: 16.56854, y: 0 } },{ point: { x: 130, y: 100 }, handleIn: { x: 0, y: 16.56854 }, handleOut: { x: 0, y: -16.56854 } },{ point: { x: 100, y: 70 }, handleIn: { x: 16.56854, y: 0 }, handleOut: { x: -16.56854, y: 0 } },{ point: { x: 70, y: 100 }, handleIn: { x: 0, y: -16.56854 }, handleOut: { x: 0, y: 16.56854 } }');
});


@@ -3103,16 +3103,225 @@
 854 %7D %7D');%0A%7D);%0A%0A
+test('Path#fullySelected', function() %7B%0A%09var path = new Path.Circle(%5B100, 100%5D, 10);%0A%09path.selected = true;%0A%09path.segments%5B1%5D.selected = false;%0A%09equals(function() %7B%0A%09%09return path.fullySelected;%0A%09%7D, false);%0A%7D);

Add failing test for Path#fullySelected.