function selected(sName, sOld, sNew, sUpdated, bFire) {
			property(sName, sOld, sNew, sUpdated, bFire);
			aSelect.push(sName);
			aSelect.push("nested/" + sName);
		}
******************************************************************************************
	QUnit.test("namespace", function (assert) {
		assert.strictEqual(_Helper.namespace("Products"), "");
		assert.strictEqual(_Helper.namespace("zui5_epm_sample.Products"), "zui5_epm_sample");
		assert.strictEqual(_Helper.namespace("zui5_epm_sample.v1.Products"), "zui5_epm_sample.v1");
		assert.strictEqual(_Helper.namespace("zui5_epm_sample.v1.Products/Category/type.cast"),
			"zui5_epm_sample.v1");
		assert.strictEqual(
			_Helper.namespace("zui5_epm_sample.v1.Action(ui5_epm_sample.v1.EntityType)/"),
			"zui5_epm_sample.v1");
		assert.strictEqual(
			_Helper.namespace("zui5_epm_sample.v1.Action(ui5_epm_sample.v1.EntityType)/Country"),
			"zui5_epm_sample.v1");
		assert.strictEqual(
			_Helper.namespace("zui5_epm_sample.v1.Action(Collection"
				+ "(ui5_epm_sample.v1.EntityType))"),
			"zui5_epm_sample.v1");
		assert.strictEqual(
			_Helper.namespace("zui5_epm_sample.v1.Action(Collection(ui5_epm_sample.v1.EntityType))"
				+ "/Country"),
			"zui5_epm_sample.v1");
		assert.strictEqual(
			_Helper.namespace("zui5_epm_sample.v1.Action(Collection(ui5_epm_sample.v1.EntityType))"
				+ "/Address/Country"),
			"zui5_epm_sample.v1");
	});

	//*********************************************************************************************
	QUnit.test("updateNonExisting", function (assert) {
		var oSource = {
				b1 : "n/a",
				b2 : {
					b1 : "b1s",
					s1 : "s1"
				},
				b3 : null,
				b4 : ["s1", "s2", "s3"],
				b5 : {s1 : "s1"},
				s1 : "s1"
			},
			oTarget = {
				b1 : "",
				b2 : {
					b1 : "b1t",
					t1 : "t1"
				},
				b3 : {},
				b4 : ["t1", "t2"],
				b5 : null,
				t1 : "t1"
			},
			oB2 = oTarget.b2,
			oB3 = oTarget.b3;

		// code under test
		_Helper.updateNonExisting(oTarget, oSource);

		assert.deepEqual(oTarget, {
			b1 : "",
			b2 : {
				b1 : "b1t",
				s1 : "s1",
				t1 : "t1"
			},
			b3 : {},
			b4 : ["t1", "t2"],
			b5 : null,
			s1 : "s1",
			t1 : "t1"
		});
		assert.strictEqual(oTarget.b2, oB2, "nested instance remained");
		assert.strictEqual(oTarget.b3, oB3, "nested instance remained");
	});

	//*********************************************************************************************
	QUnit.test("updateSelected: properties & annotations", function (assert) {
		var oCacheValue = {
				"@$ui5._" : {predicate : "('1')"}, // must not get lost
				"editing@$ui5.updating" : true, // must not get lost
				nested : {
					"editing@$ui5.updating" : true // must not get lost
				}
			},
			oHelperMock = this.mock(_Helper),
			oNewValue = {
				ignore : {}, // nothing selected here
				nested : {}
			},
			oNewValueJSON,
			aSelect = [],
			aSelectJSON,
			oUpdatedValue = {
				"@$ui5._" : {predicate : "('1')"},
				"editing@$ui5.updating" : true,
				nested : {
					"editing@$ui5.updating" : true
				}
			};

		function set(oObject, sName, sValue) {
			if (sValue !== undefined) {
				oObject[sName] = sValue;
				oObject.nested[sName] = sValue;
			}
		}

		function property(sName, sOld, sNew, sUpdated, bFire) {
			set(oCacheValue, sName, sOld);
			set(oNewValue, sName, sNew);
			set(oUpdatedValue, sName, sUpdated);
			if (bFire === 1) {
				oHelperMock.expects("fireChange")
					.withExactArgs("~mChangeListener~", "base/path/" + sName, sUpdated, false,
						/*bInArray