/*
 * Paper.js - The Swiss Army Knife of Vector Graphics Scripting.
 * http://paperjs.org/
 *
 * Copyright (c) 2011 - 2014, Juerg Lehni & Jonathan Puckey
 * http://scratchdisk.com/ & http://jonathanpuckey.com/
 *
 * Distributed under the MIT license. See LICENSE file for details.
 *
 * All rights reserved.
 */

module('Getting and Matching Items');

test('Item#getItems()', function() {
	var group = new Group([new Path({ selected: true }), new Raster()]);
	equals(function() {
		var items = group.getItems({
			type: 'path'
		});
		return items.length == 1;
	}, true);

	equals(function() {
		var items = group.getItems({
			selected: true
		});
		return items.length == 1;
	}, true);
});

test('Item#matches()', function() {
	var path = new Path();
	equals(function() {
		return path.matches({
			visible: false
		});
	}, false);

	equals(function() {
		return path.matches({
			visible: true
		});
	}, true);
});

test('Project#getItems()', function() {
	equals(function() {
		var matches = paper.project.getItems({
			type: 'layer'
		});
		return matches.length == 1 && matches[0] == paper.project.activeLayer;
	}, true);

	equals(function() {
		var matches = paper.project.getItems({
			'class': Item
		});
		return matches.length == 1 && matches[0] == paper.project.activeLayer;
	}, true);

	var path = new Path();
	equals(function() {
		var matches = paper.project.getItems({
			type: 'path'
		});
		return matches.length == 1 && matches[0] == path;
	}, true);

	equals(function() {
		var matches = paper.project.getItems({
			'constructor': Path
		});
		return matches.length == 1 && matches[0] === path;
	}, true);


	var group = new Group();
	equals(function() {
		var matches = paper.project.getItems({
			type: 'group'
		});
		return matches.length == 1 && matches[0] === group
	}, true);

	var raster = new Raster();
	equals(function() {
		var matches = paper.project.getItems({
			type: 'raster'
		});
		return matches.length == 1 && matches[0] === raster
	}, true);

	equals(function() {
		return paper.project.getItems({
			selected: true
		}).length;
	}, 0);

	equals(function() {
		raster.selected = true;
		return paper.project.getItems({
			selected: true
		}).length;
	}, 2);

	equals(function() {
		raster.selected = true;
		return paper.project.getItems({
			selected: true,
			type: 'raster'
		}).length;
	}, 1);
});

test('Project#getItems() with compare function', function() {
	var firstPath = new Path();
	var path = new Path({
		opacity: 0.5
	});

	equals(function() {
		var items = paper.project.getItems({
			opacity: function(value) {
				return value < 1
			}
		});
		return items.length == 1 && items[0] == path;
	}, true);
});

test('Project#getItems() with specific property value', function() {
	var path = new Path();
	var decoyPath = new Path({
		opacity: 0.5
	});

	equals(function() {
		var items = paper.project.getItems({
			opacity: 1,
			type: 'path'
		});
		return items.length == 1 && items[0] == path;
	}, true);
});

test('Project#getItems() with color', function() {
	var red = new Color('red');

	var path = new Path({
		fillColor: red
	});

	var decoyPath = new Path({
		fillColor: 'black'
	});

	equals(function() {
		var items = paper.project.getItems({
			fillColor: new Color('red'),
			type: 'path'
		});
		return items.length == 1 && items[0] == path;
	}, true);
});

test('Project#getItems() with regex function', function() {
	var decoyPath = new Path({
		name: 'stop'
	});

	var decoyPath2 = new Path({
		name: 'pause'
	});

	var path = new Path({
		name: 'starting'
	});

	equals(function() {
		var items = paper.project.getItems({
			name: /^start/g
		});
		return items.length == 1 && items[0] == path;
	}, true);

	equals(function() {
		var items = paper.project.getItems({
			name: /^st/g
		});
		return items.length == 2;
	}, true);
});

@@ -3016,38 +3016,8 @@
 ) %7B%0A
-%09var red = new Color('red');%0A%0A
 %09var
@@ -3048,19 +3048,21 @@
 lColor: 
+'
 red
+'
 %0A%09%7D);%0A%0A%09
@@ -3193,24 +3193,13 @@
 or: 
-new Color(
 'red'
-)
 ,%0A%09%09

Update Project#getItems test to reflect new functionality.