private static QualifierSpaceId CreateQualifierSpaceId(QualifierTable qualifierTable, QualifierSpaceDeclaration qualifierSpaceDeclaration) { if (qualifierSpaceDeclaration.Count == 0) { return(qualifierTable.EmptyQualifierSpaceId); } return(qualifierTable.CreateQualifierSpace(qualifierSpaceDeclaration)); }
public void EmptyTable() { var context = FrontEndContext.CreateInstanceForTesting(); var table = new QualifierTable(context.StringTable); XAssert.AreEqual("{}", ToString(table.EmptyQualifierId, table, context)); XAssert.AreEqual("{}", ToString(table.CreateQualifierSpace(new Tuple <string, string[]> [0]), table, context)); XAssert.AreEqual(1, table.QualifiersCount); XAssert.AreEqual(1, table.QualifierSpacesCount); }
/// <summary> /// Reads a QualifierSpaceId from a string representation /// </summary> public override QualifierSpaceId ReadQualifierSpaceId() { Start <QualifierSpaceId>(); var isValid = ReadBoolean(); if (!isValid) { return(QualifierSpaceId.Invalid); } // The qualifier space is stored as <key, value[]>[] var qualifierSpace = ReadArray(reader => new Tuple <string, string[]>(reader.ReadString(), ReadArray(reader2 => reader2.ReadString()))); var value = m_qualifierTable.CreateQualifierSpace(qualifierSpace); End(); return(value); }
private void TestTryCoerceScopeToSpace( Func <QualifierTable, QualifierId> getQualifier, Dictionary <string, string[]> space, string expectedQualifier, bool expectedSuccess = true, bool useDefaultsOnCoercion = true) { var context = FrontEndContext.CreateInstanceForTesting(); var table = new QualifierTable(context.StringTable); var testQualifier = getQualifier(table); var testSpace = table.CreateQualifierSpace(space.Select(kvp => new Tuple <string, string[]>(kvp.Key, kvp.Value)).ToArray()); QualifierId q; UnsupportedQualifierValue error; var result = table.TryCreateQualifierForQualifierSpace( context.PathTable, context.LoggingContext, testQualifier, testSpace, useDefaultsForCoercion: useDefaultsOnCoercion, resultingQualifierId: out q, error: out error); XAssert.AreEqual(expectedSuccess, result); if (result) { XAssert.AreEqual(expectedQualifier, ToString(q, table, context)); } else { var location = LocationData.Create(AbsolutePath.Create(context.PathTable, m_path), 10, 10); Logger.Log.ErrorUnsupportedQualifierValue( context.LoggingContext, location.ToLogLocation(context.PathTable), error.QualifierKey, error.InvalidValue, error.LegalValues ); } }
public void MutateQualifierSpace() { var context = FrontEndContext.CreateInstanceForTesting(); var table = new QualifierTable(context.StringTable); XAssert.AreEqual(1, table.QualifierSpacesCount, "Empty qualifier space should be added by default"); // Add simple key var space1 = table.CreateQualifierSpace(new Tuple <string, string[]>("Akey", new[] { "AVal1" })); XAssert.AreEqual("{Akey:[\"AVal1\"]}", ToString(space1, table, context)); XAssert.AreEqual(2, table.QualifierSpacesCount, "Item should be added"); // Add again key var space2 = table.CreateQualifierSpace(new Tuple <string, string[]>("Akey", new[] { "AVal1" })); XAssert.AreEqual("{Akey:[\"AVal1\"]}", ToString(space2, table, context)); XAssert.AreEqual(2, table.QualifierSpacesCount, "Item should have been cached"); // Add same key different value var space3 = table.CreateQualifierSpace(new Tuple <string, string[]>("Akey", new[] { "AVal2" })); XAssert.AreEqual("{Akey:[\"AVal2\"]}", ToString(space3, table, context)); XAssert.AreEqual(3, table.QualifierSpacesCount, "Item should be added"); // Add same key all values value var space4 = table.CreateQualifierSpace(new Tuple <string, string[]>("Akey", new[] { "AVal1", "AVal2" })); XAssert.AreEqual("{Akey:[\"AVal1\", \"AVal2\"]}", ToString(space4, table, context)); XAssert.AreEqual(4, table.QualifierSpacesCount, "Item should be added"); // Add multiple keys and values var space5 = table.CreateQualifierSpace( new Tuple <string, string[]>("Akey", new[] { "AVal1", "AVal2", "AVal3" }), new Tuple <string, string[]>("BKey", new[] { "BVal1", "BVal2", "BVal3" })); XAssert.AreEqual("{Akey:[\"AVal1\", \"AVal2\", \"AVal3\"], BKey:[\"BVal1\", \"BVal2\", \"BVal3\"]}", ToString(space5, table, context)); XAssert.AreEqual(5, table.QualifierSpacesCount, "Item should be added"); // Add same keys and values but different order var space6 = table.CreateQualifierSpace( new Tuple <string, string[]>("BKey", new[] { "BVal1", "BVal3", "BVal2" }), new Tuple <string, string[]>("Akey", new[] { "AVal1", "AVal3", "AVal2" })); XAssert.AreEqual("{Akey:[\"AVal1\", \"AVal2\", \"AVal3\"], BKey:[\"BVal1\", \"BVal2\", \"BVal3\"]}", ToString(space6, table, context)); XAssert.AreEqual(5, table.QualifierSpacesCount, "Item should have been cached"); }