public void IsPositionalTest(string input, bool expected) { // Arrange var parameters = CreateParameters(10); // Act var messageTemplateParameters = new MessageTemplateParameters(input, parameters); // Assert Assert.Equal(expected, messageTemplateParameters.IsPositional); }
public void ParseParameters(string input, int expected) { // Arrange var parameters = CreateParameters(expected); // Act var messageTemplateParameters = new MessageTemplateParameters(input, parameters); // Assert Assert.Equal(expected, messageTemplateParameters.Count); }
[InlineData("{A} {A}", 2, true)] //overwrite public void IsValidTemplateTest(string input, int parameterCount, bool expected) { // Arrange var parameters = CreateParameters(parameterCount); // Act var messageTemplateParameters = new MessageTemplateParameters(input, parameters); // Assert Assert.Equal(expected, messageTemplateParameters.IsValidTemplate); }
public void DisplaySelectForm([Comments("Configuration details for the form.")] MessageTemplateParameters setting, [ListEditorControl(ListControlType.Connectors)] ICollection <ConnectorParameters> buttons) { MessageTemplateView view = this.mapper.Map <MessageTemplateView>(setting); this.screenData.ScreenSettings = new ScreenSettings <MessageTemplateView> ( view, mapper.Map <IEnumerable <ConnectorParameters>, IEnumerable <CommandButtonView> >(buttons), ViewType.Select, new MenuItem { Text = view.Message, Icon = view.Icon } ); }
public void IndexerTest(string input, int index, object expectedValue, string expectedName, int?expectedPositionalIndex, CaptureType expectedCaptureType) { // Arrange var parameters = CreateParameters(1); // Act var messageTemplateParameters = new MessageTemplateParameters(input, parameters); // Assert Assert.Equal(expectedValue, messageTemplateParameters[index].Value); Assert.Equal(expectedName, messageTemplateParameters[index].Name); Assert.Equal(expectedPositionalIndex, messageTemplateParameters[index].PositionalIndex); Assert.Equal(expectedCaptureType, messageTemplateParameters[index].CaptureType); }
public void EnumeratorTest(string input, string namesRaw) { // Arrange var parameters = CreateParameters(1); var names = namesRaw.Split(';'); // Act var messageTemplateParameters = new MessageTemplateParameters(input, parameters); // Assert var resultNames = messageTemplateParameters.Select(t => t.Name).ToArray(); Assert.Equal(names, resultNames); }
public void ParseParameters(string input, int count) { // Arrange var parameters = new List <object>(count); for (int i = 0; i < count; i++) { parameters.Add(i.ToString()); } // Act var MessageTemplateParameters = new MessageTemplateParameters(input, parameters.ToArray()); // Assert Assert.Equal(count, MessageTemplateParameters.Count); }
/// <summary> /// Find max index of the parameters /// </summary> /// <param name="messageTemplateParameters"></param> /// <returns>index, 0 or higher</returns> private static int FindMaxIndex(MessageTemplateParameters messageTemplateParameters) { int maxIndex = 0; for (int i = 0; i < messageTemplateParameters.Count; ++i) { if (messageTemplateParameters[i].Name.Length == 1) { maxIndex = Math.Max(maxIndex, messageTemplateParameters[i].Name[0] - '0'); } else { maxIndex = Math.Max(maxIndex, int.Parse(messageTemplateParameters[i].Name, System.Globalization.CultureInfo.InvariantCulture)); } } return(maxIndex); }
/// <summary> /// Find max index of the parameters /// </summary> /// <param name="messagetTemplateParameters"></param> /// <returns>index, 0 or higher</returns> private static int FindMaxIndex(MessageTemplateParameters messagetTemplateParameters) { int maxIndex = 0; for (int i = 0; i < messagetTemplateParameters.Count; ++i) { if (messagetTemplateParameters[i].Name.Length == 1) { maxIndex = Math.Max(maxIndex, messagetTemplateParameters[i].Name[0] - '0'); } else { maxIndex = Math.Max(maxIndex, int.Parse(messagetTemplateParameters[i].Name)); } } return(maxIndex); }
private static object[] CreatePositionalLogEventInfoParameters(NLogMessageParameterList messageParameters, MessageTemplateParameters messageTemplateParameters, out List <KeyValuePair <string, object> > extraProperties) { extraProperties = null; var maxIndex = FindMaxIndex(messageTemplateParameters); object[] paramsArray = null; int messageParameterCount = messageParameters.Count; for (int i = 0; i < messageParameterCount; ++i) { // First positional name is the startPos if (char.IsDigit(messageParameters[i].Name[0]) && paramsArray == null) { paramsArray = new object[maxIndex + 1]; for (int j = 0; j <= maxIndex; ++j) { if (i + j < messageParameterCount) { paramsArray[j] = messageParameters[i + j].Value; } } i += maxIndex; } else { extraProperties = AddExtraProperty(extraProperties, messageParameters[i]); } } return(paramsArray ?? new object[maxIndex + 1]); }
private static object[] CreateStructuredLogEventInfoParameters(NLogMessageParameterList messageParameters, MessageTemplateParameters messageTemplateParameters, out List <KeyValuePair <string, object> > extraProperties) { extraProperties = null; var paramsArray = new object[messageTemplateParameters.Count]; int startPos = 0; int messageParameterCount = messageParameters.Count; for (int i = 0; i < messageParameterCount; ++i) { var propertyName = messageParameters[i].Name; bool extraProperty = true; for (int j = startPos; j < messageTemplateParameters.Count; ++j) { if (propertyName.Equals(messageTemplateParameters[j].Name, StringComparison.Ordinal)) { extraProperty = false; paramsArray[j] = messageParameters[i].Value; if (startPos == j) { startPos++; } break; } } if (extraProperty) { extraProperties = AddExtraProperty(extraProperties, messageParameters[i]); } } return(paramsArray); }
/// <summary> /// Are all parameters positional and correctly mapped? /// </summary> /// <param name="messageParameters"></param> /// <param name="messageTemplateParameters"></param> /// <returns>true if correct</returns> private static bool AllParameterCorrectlyPositionalMapped(NLogMessageParameterList messageParameters, MessageTemplateParameters messageTemplateParameters) { if (messageTemplateParameters.Count != messageParameters.Count) { return(false); } for (int i = 0; i < messageTemplateParameters.Count; ++i) { if (!messageParameters[i].Name.Equals(messageTemplateParameters[i].Name, StringComparison.Ordinal)) { return(false); } } return(true); }
/// <summary> /// Allocates object[]-array for <see cref="LogEventInfo.Parameters"/> after checking /// for mismatch between Microsoft Extension Logging and NLog Message Template Parser /// </summary> /// <remarks> /// Cannot trust the parameters received from Microsoft Extension Logging, as extra parameters can be injected /// </remarks> private static void CaptureLogEventInfoParameters(LogEventInfo logEvent, NLogMessageParameterList messageParameters, MessageTemplateParameters messageTemplateParameters) { if (messageTemplateParameters.IsPositional) { logEvent.Parameters = CreatePositionalLogEventInfoParameters(messageParameters, messageTemplateParameters, out var extraProperties); if (extraProperties?.Count > 0) { CaptureMessagePropertiesList(logEvent, extraProperties); } } else if (!AllParameterCorrectlyPositionalMapped(messageParameters, messageTemplateParameters)) { // Resolves mismatch between the input from Microsoft Extension Logging TState and NLog Message Template Parser logEvent.Parameters = CreateStructuredLogEventInfoParameters(messageParameters, messageTemplateParameters, out var extraProperties); if (extraProperties?.Count > 0) { CaptureMessagePropertiesList(logEvent, extraProperties); } } else { // Everything is mapped correctly, inject messageParameters directly as params-array var paramsArray = new object[messageTemplateParameters.Count]; for (int i = 0; i < paramsArray.Length; ++i) { paramsArray[i] = messageParameters[i].Value; } logEvent.Parameters = paramsArray; } }
private static object[] CreateStructuredLogEventInfoParameters(NLogMessageParameterList messageParameters, MessageTemplateParameters messagetTemplateParameters, out List <MessageTemplateParameter> extraProperties) { extraProperties = null; var paramsArray = new object[messagetTemplateParameters.Count]; int startPos = 0; for (int i = 0; i < messageParameters.Count; ++i) { bool extraProperty = true; for (int j = startPos; j < messagetTemplateParameters.Count; ++j) { if (messageParameters[i].Name == messagetTemplateParameters[j].Name) { extraProperty = false; paramsArray[j] = messageParameters[i].Value; if (startPos == j) { startPos++; } break; } } if (extraProperty) { extraProperties = AddExtraProperty(extraProperties, messageParameters[i]); } } return(paramsArray); }
/// <summary> /// Are all parameters positional and correctly mapped? /// </summary> /// <param name="messageParameters"></param> /// <param name="messagetTemplateParameters"></param> /// <returns>true if correct</returns> private static bool AllParameterCorrectlyPositionalMapped(NLogMessageParameterList messageParameters, MessageTemplateParameters messagetTemplateParameters) { if (messagetTemplateParameters.Count != messageParameters.Count || messagetTemplateParameters.IsPositional) { return(false); } for (int i = 0; i < messagetTemplateParameters.Count; ++i) { if (messagetTemplateParameters[i].Name != messageParameters[i].Name) { return(false); } } return(true); }
/// <summary> /// Allocates object[]-array for <see cref="LogEventInfo.Parameters"/> after checking /// for mismatch between Microsoft Extension Logging and NLog Message Template Parser /// </summary> /// <remarks> /// Cannot trust the parameters received from Microsoft Extension Logging, as extra parameters can be injected /// </remarks> private static object[] CreateLogEventInfoParameters(NLogMessageParameterList messageParameters, MessageTemplateParameters messagetTemplateParameters, out List <MessageTemplateParameter> extraProperties) { if (AllParameterCorrectlyPositionalMapped(messageParameters, messagetTemplateParameters)) { // Everything is mapped correctly, inject messageParameters directly as params-array extraProperties = null; var paramsArray = new object[messagetTemplateParameters.Count]; for (int i = 0; i < paramsArray.Length; ++i) { paramsArray[i] = messageParameters[i].Value; } return(paramsArray); } else { // Resolves mismatch between the input from Microsoft Extension Logging TState and NLog Message Template Parser if (messagetTemplateParameters.IsPositional) { return(CreatePositionalLogEventInfoParameters(messageParameters, messagetTemplateParameters, out extraProperties)); } else { return(CreateStructuredLogEventInfoParameters(messageParameters, messagetTemplateParameters, out extraProperties)); } } }