public void ParameterDefinition_Constructor_Sets_Default_Formatter()
        {
            var parameterDefinition = new ParameterDefinition("name", "label");

            Assert.IsNotNull(parameterDefinition.Formatter);
            Assert.AreEqual("testing", parameterDefinition.Formatter("testing"));
        }
        public void ParameterDefinition_Constructor_Sets_Required_Properties()
        {
            var parameterDefinition = new ParameterDefinition("name", "label");

            Assert.AreEqual("name", parameterDefinition.Name);
            Assert.AreEqual("label", parameterDefinition.Label);
        }
        public void ParameterDefinition_Constructor_Sets_Optional_Properties()
        {
            Func<string, string> formatter = s => s + "great";
            var parameterDefinition = new ParameterDefinition("name", "label", formatter, true);

            Assert.AreEqual(true, parameterDefinition.IsRegexMatch);
            Assert.AreEqual(formatter, parameterDefinition.Formatter);
            Assert.AreEqual("so great", parameterDefinition.Formatter("so "));
        }
        public void ParameterDefinition_Constructor_Sets_All_Properties()
        {
            Func<string, string> formatter = s => s + "great";
            var parameterDefinition = new ParameterDefinition("name", "label", formatter);

            Assert.AreEqual("name", parameterDefinition.Name);
            Assert.AreEqual("label", parameterDefinition.Label);
            Assert.AreEqual(formatter, parameterDefinition.Formatter);
            Assert.AreEqual("so great", parameterDefinition.Formatter("so "));
        }
 /// <summary>
 /// Dump any parameters that match the given parameter definition's regular expression.
 /// </summary>
 /// <param name="parameterDefinition">Parameter definition to regex match with parameters.</param>
 /// <param name="parameters">All parameters to consider for a regex match.</param>
 /// <param name="writer">Action that takes a string to receive output.</param>
 private void DumpRegexParameters(ParameterDefinition parameterDefinition, Dictionary<string, string> parameters, Action<string> writer)
 {
     foreach (var pair in parameters)
     {
         var match = Regex.Match(pair.Key, parameterDefinition.Name);
         if (match.Success)
         {
             var label = parameterDefinition.Label.Replace("$1", match.Groups[1].Captures[0].Value);
             DumpParameter(parameterDefinition, label, pair.Value, writer);
         }
     }
 }
 /// <summary>
 /// Dump any parameter exactly matching the given parameter definition.
 /// </summary>
 /// <param name="parameterDefinition">Parameter definition to exactly match with parameters.</param>
 /// <param name="parameters">All parameters to consider for an exact match.</param>
 /// <param name="writer">Action that takes a string to receive debugger output.</param>
 private void DumpExactParameter(ParameterDefinition parameterDefinition, Dictionary<string, string> parameters, Action<string> writer)
 {
     string rawValue;
     if (parameters.TryGetValue(parameterDefinition.Name, out rawValue))
         DumpParameter(parameterDefinition, parameterDefinition.Label, rawValue, writer);
 }
 /// <summary>
 /// Create a new ProtocolDebugger with a given action to receive debugger output.
 /// </summary>
 /// <param name="parameterDefinitions">Array of ParameterDefinitions valid for this debugger.</param>
 public ProtocolDebugger(ParameterDefinition[] parameterDefinitions)
 {
     this.parameterDefinitions = parameterDefinitions;
 }
 /// <summary>
 /// Format and write a parameter to the current writer.
 /// </summary>
 /// <param name="parameterDefinition">Parameter to write out.</param>
 /// <param name="label">Human-readable label to prefix before the value.</param>
 /// <param name="rawValue">Raw value of the parameter to format before writing.</param>
 /// <param name="writer">Action that takes a string to receive output.</param>
 private void DumpParameter(ParameterDefinition parameterDefinition, string label, string rawValue, Action<string> writer)
 {
     var formattedValue = parameterDefinition.Formatter(rawValue);
     if (!String.IsNullOrWhiteSpace(formattedValue))
         writer(label.PadRight(24) + ": " + formattedValue);
 }
 /// <summary>
 /// Format and write a parameter to the current writer.
 /// </summary>
 /// <param name="parameterDefinition">Parameter to write out.</param>
 /// <param name="rawValue">Raw value of the parameter to format before writing.</param>
 private void WriteParameter(ParameterDefinition parameterDefinition, string rawValue)
 {
     var formattedValue = parameterDefinition.Formatter(rawValue);
     if (!String.IsNullOrWhiteSpace(formattedValue))
         writer(parameterDefinition.Label.PadRight(24) + ": " + formattedValue);
 }
 /// <summary>
 /// Create a new ProtocolDebugger with a given action to receive debugger output.
 /// </summary>
 /// <param name="writer">Action that takes a string to receive debugger output.</param>
 /// <param name="parameterDefinitions">Array of ParameterDefinitions valid for this debugger.</param>
 public ProtocolDebugger(Action<string> writer, ParameterDefinition[] parameterDefinitions)
 {
     this.writer = writer;
     this.parameterDefinitions = parameterDefinitions;
 }