function check(sValue) {
			assert.deepEqual(Expression.constant({value : sValue}, "String"), {
				result : "constant",
				type : "Edm.String",
				value : sValue
			});
		}
******************************************************************************************
	[null, {$Null : null}].forEach(function (oRawValue) {
		QUnit.test("expression: " + JSON.stringify(oRawValue), function (assert) {
			var oPathValue = {path : "/my/path", value : oRawValue};

			assert.deepEqual(Expression.expression(oPathValue).unwrap(), {
				result : "constant",
				type : "edm:Null",
				value : null
			});
		});
	});

	//*********************************************************************************************
	QUnit.test("expression: unknown", function (assert) {
		var oError = new SyntaxError(),
			oPathValue = {value : {}};

		this.mock(Basics).expects("error")
			.withExactArgs(sinon.match.same(oPathValue), "Unsupported OData expression",
				sAnnotationHelper)
			.throws(oError);

		assertRejected(assert, Expression.expression(oPathValue), oError);
	});
	//TODO $Cast, $IsOf, $LabeledElement, $LabeledElementReference, $UrlRef
	//TODO 14.5.5 Expression Collection, 14.5.14 Expression Record

	//*********************************************************************************************
	QUnit.test("String constants {@i18n>...} turned into a binding", function (assert) {
		assert.deepEqual(Expression.constant({value : "{@i18n>foo/bar}"}, "String"), {
			ignoreTypeInPath : true,
			result : "binding",
			type : "Edm.String",
			value : "@i18n>foo/bar"
		});
	});

	//*********************************************************************************************
	QUnit.test("Only simple binding syntax allowed for {@i18n>...}", function (assert) {
		/*
@param {string} sValue