private static string ProcessFormatStringForAliases(string format)
        {
            Func <int, string> getFriendlyAliasKey = n => "{newAlias" + n + "}";
            var aliasGenerator = new AliasGenerator("fltr_", useSharedState: true);

            var parameterValues = new List <object>();

            if (format.Contains("{currentAlias}"))
            {
                // Leave the current alias parameter intact in the string after preparation as the {0} marker.
                format = format.Replace("{currentAlias}", "{0}");
                parameterValues.Add("{0}");
            }

            int newAliasNumber = 1;

            // Get the initial key to look for
            string friendlyAliasKey = getFriendlyAliasKey(newAliasNumber);

            while (format.Contains(friendlyAliasKey))
            {
                // Replace friendly alias marker with 0-based numeric format specifier
                format = format.Replace(getFriendlyAliasKey(newAliasNumber), "{" + parameterValues.Count + "}");

                // Add the corresponding value to the parameters
                parameterValues.Add(aliasGenerator.GetNextAlias());

                // Create the key for the next possible friendly parameter marker
                friendlyAliasKey = getFriendlyAliasKey(++newAliasNumber);
            }

            string defaultCondition = string.Format(format, parameterValues.ToArray());

            return(defaultCondition);
        }
示例#2
0
        public void Should_generate_incremented_aliases_across_multiple_generators()
        {
            Assert.That(_generator1.GetNextAlias(), Is.EqualTo("1_aaa"));
            Assert.That(_generator2.GetNextAlias(), Is.EqualTo("1_aab"));
            Assert.That(_generator3.GetNextAlias(), Is.EqualTo("1_aac"));

            Assert.That(_instanceGenerator.GetNextAlias(), Is.EqualTo("1_aaa"));

            Assert.That(_generator3.GetNextAlias(), Is.EqualTo("1_aad"));
            Assert.That(_generator2.GetNextAlias(), Is.EqualTo("1_aae"));

            Assert.That(_instanceGenerator.GetNextAlias(), Is.EqualTo("1_aab"));

            Assert.That(_generator1.GetNextAlias(), Is.EqualTo("1_aaf"));

            Assert.That(_instanceGenerator.GetNextAlias(), Is.EqualTo("1_aac"));
        }
示例#3
0
        // Dependencies
        protected override void Act()
        {
            // Execute code under test
            var generator = new AliasGenerator("fltr_", useSharedState: true);

            generator.Reset();

            _actualAliases = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);

            int i = 0;

            string firstAlias = null;

            while (i++ < 100000)
            {
                string nextAlias = generator.GetNextAlias();

                if (firstAlias == null)
                {
                    firstAlias = nextAlias;
                }

                if (!_actualAliases.Add(nextAlias))
                {
                    // If we looped around
                    if (nextAlias == firstAlias && i == 26 * 26 * 26 + 1)
                    {
                        break;
                    }

                    Assert.Fail("Duplicate alias generated: '{0}'", nextAlias);
                }
            }

            if (i >= 100000)
            {
                Assert.Fail("Possible infinite loop detected in alias generation.  Stopped at 100,000 aliases.");
            }
        }
示例#4
0
        // Dependencies
        protected override void Act()
        {
            // Execute code under test
            var generator = new AliasGenerator("fltr_", useSharedState: false);

            generator.Reset();

            _actualAliases = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);

            int i = 0;

            while (i++ < 100000)
            {
                string nextAlias = generator.GetNextAlias();

                if (!_actualAliases.Add(nextAlias))
                {
                    Assert.Fail("Duplicate alias generated: '{0}'", nextAlias);
                }
            }

            Assert.Fail("Possible infinite loop detected in alias generation.  Stopped at 100,000 aliases.");
        }