Пример #1
0
        private static QualifierSpaceId CreateQualifierSpaceId(QualifierTable qualifierTable, QualifierSpaceDeclaration qualifierSpaceDeclaration)
        {
            if (qualifierSpaceDeclaration.Count == 0)
            {
                return(qualifierTable.EmptyQualifierSpaceId);
            }

            return(qualifierTable.CreateQualifierSpace(qualifierSpaceDeclaration));
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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
                    );
            }
        }
Пример #5
0
        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");
        }