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); }
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")); }
// 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."); } }
// 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."); }