/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.lang.assert");
dojo.require("dojo.lang.common");
dojo.require("dojo.lang.array");
dojo.require("dojo.lang.type");
dojo.lang.assert = function (booleanValue, message) {
	if (!booleanValue) {
		var errorMessage = "An assert statement failed.\n" + "The method dojo.lang.assert() was called with a 'false' value.\n";
		if (message) {
			errorMessage += "Here's the assert message:\n" + message + "\n";
		}
		throw new Error(errorMessage);
	}
};
dojo.lang.assertType = function (value, type, keywordParameters) {
	if (dojo.lang.isString(keywordParameters)) {
		dojo.deprecated("dojo.lang.assertType(value, type, \"message\")", "use dojo.lang.assertType(value, type) instead", "0.5");
	}
	if (!dojo.lang.isOfType(value, type, keywordParameters)) {
		if (!dojo.lang.assertType._errorMessage) {
			dojo.lang.assertType._errorMessage = "Type mismatch: dojo.lang.assertType() failed.";
		}
		dojo.lang.assert(false, dojo.lang.assertType._errorMessage);
	}
};
dojo.lang.assertValidKeywords = function (object, expectedProperties, message) {
	var key;
	if (!message) {
		if (!dojo.lang.assertValidKeywords._errorMessage) {
			dojo.lang.assertValidKeywords._errorMessage = "In dojo.lang.assertValidKeywords(), found invalid keyword:";
		}
		message = dojo.lang.assertValidKeywords._errorMessage;
	}
	if (dojo.lang.isArray(expectedProperties)) {
		for (key in object) {
			if (!dojo.lang.inArray(expectedProperties, key)) {
				dojo.lang.assert(false, message + " " + key);
			}
		}
	} else {
		for (key in object) {
			if (!(key in expectedProperties)) {
				dojo.lang.assert(false, message + " " + key);
			}
		}
	}
};

