function testConversionForInclude(assert, sXmlSnippet, oExpected, bSubset) {
		var bIgnoreAnnotations,
			aKeysWithAnnotations = [],
			sProperty,
			oXML = xml(assert, sEdmx + sXmlSnippet + "</edmx:Edmx>"),
			oResult = new _V2MetadataConverter().convertXMLMetadata(oXML, "/foo/bar/$metadata");

		if (bSubset) {
			for (sProperty in oExpected) {
				if (sProperty in oResult) {
					assert.deepEqual(oResult[sProperty], oExpected[sProperty], sProperty);
				} else {
					assert.ok(false, "Missing property: " + sProperty);
				}
			}
		} else {
			oExpected.$Version = "4.0";
			assert.deepEqual(oResult, oExpected);
		}

		Object.keys(oExpected).forEach(function (sKey) {
			if (oExpected[sKey].$Annotations) {
				oExpected[sKey].$Annotations = {};
				aKeysWithAnnotations.push(sKey);
				bIgnoreAnnotations = true;
			}
		});
		if (bIgnoreAnnotations) { // ignoreAnnotationsFromMetadata
			oResult = new _V2MetadataConverter()
				.convertXMLMetadata(oXML, "/foo/bar/$metadata", true);

			if (bSubset) {
				aKeysWithAnnotations.forEach(function (sKey) {
					assert.deepEqual(oResult[sKey].$Annotations, {});
				});
			} else {
				assert.deepEqual(oResult, oExpected);
			}
		}
	}
Tests the given XML snippet produces the expected aliases for include.
@param {object} assert
  QUnit's assert
@param {string} sXmlSnippet
  the XML snippet; it will be inserted below an <Edmx> element
@param {object} oExpected
  the expected JSON object
@param {boolean} [bSubset]
  whether the given JSON is just a subset of the real expectation, i.e. every top-level
  property that is given must exist with the exact value (deepEqual), but there may be others